如果我直接在SPring-bean.xml里面配置beans如下:
在AbcAction中的定义 如下:
<bean id="abcService" class="sdb.service.impl.AbcServiceImpl">
</bean>
<bean id="abcAction" class="sdb.action.AbcAction">
<property name="abcService" >
<ref bean="abcService"/>
</property>
</beans>
private AbcServiceImpl abcService;
public void setAbcService(AbcServiceImpl abcService){
this.abcService=abcService;
}
则运行没有任何问题。但是如果我将事物配置给Service层,
<value>*Service</value>
则启动报错。报错内容: no matching editors or conversion strategy found。
必须把action中的定义改为接口才行,这个是合理的。
但是之前我没有将service配置为事物的时候,Spring为什么不报错?我没有改过注入规则,默认可以进行实体类注入吗?
另外。如果可以进行实体类注入的话,为什么将事物配置在service层的时候就会报错了?是事物的所有者必须使用接口注入吗?
6 个解决方案
#1
是滴 spring 的service层添加事务管理时必须是接口
#2
spring的di是面向接口的。不管是service还是dao。
这个是根据设计模式中的依赖倒置原则和里氏替换原则。
这个是根据设计模式中的依赖倒置原则和里氏替换原则。
#3
哦,明白了。那为什么Service持有事物的时候就必须是接口呢?是会在Service层再加一个代理什么的,我可以这样理解吗?
#4
可是在不给Service层配置事物管理的时候,后台声明用实现类进行声明是没有问题的啊,为什么呢?
#5
声明实现是自己找到对象实例。而注解是spring找到实现类帮你实例。你既然用spring管理类就要跟着spring的规则来。
#6
spring的di是面向接口的。不管是service还是dao。
这个是根据设计模式中的依赖倒置原则和里氏替换原则。
可是在不给Service层配置事物管理的时候,后台声明用实现类进行声明是没有问题的啊,为什么呢?
声明实现是自己找到对象实例。而注解是spring找到实现类帮你实例。你既然用spring管理类就要跟着spring的规则来。
哦,你这么说我就明白了。非常感谢
#1
是滴 spring 的service层添加事务管理时必须是接口
#2
spring的di是面向接口的。不管是service还是dao。
这个是根据设计模式中的依赖倒置原则和里氏替换原则。
这个是根据设计模式中的依赖倒置原则和里氏替换原则。
#3
是滴 spring 的service层添加事务管理时必须是接口
哦,明白了。那为什么Service持有事物的时候就必须是接口呢?是会在Service层再加一个代理什么的,我可以这样理解吗?
#4
spring的di是面向接口的。不管是service还是dao。
这个是根据设计模式中的依赖倒置原则和里氏替换原则。
可是在不给Service层配置事物管理的时候,后台声明用实现类进行声明是没有问题的啊,为什么呢?
#5
spring的di是面向接口的。不管是service还是dao。
这个是根据设计模式中的依赖倒置原则和里氏替换原则。
可是在不给Service层配置事物管理的时候,后台声明用实现类进行声明是没有问题的啊,为什么呢?
声明实现是自己找到对象实例。而注解是spring找到实现类帮你实例。你既然用spring管理类就要跟着spring的规则来。
#6
spring的di是面向接口的。不管是service还是dao。
这个是根据设计模式中的依赖倒置原则和里氏替换原则。
可是在不给Service层配置事物管理的时候,后台声明用实现类进行声明是没有问题的啊,为什么呢?
声明实现是自己找到对象实例。而注解是spring找到实现类帮你实例。你既然用spring管理类就要跟着spring的规则来。
哦,你这么说我就明白了。非常感谢