1 spring中注入资源是通过描述来实现的,在 spring 中是通过注解或者 XML 描述。spring 中IOC 注入方式有三种
1)构造方法注入
2)setter 注入
3)接口注入
1.1)构造注入主要是依靠类的构造方法进行注入。比如角色类 Role, 构造方法中有三个属性,编号ID、角色名roleName和备注note
<bean id="role" class="Role">
<constructor-arg index="" value="">
<constructor-arg index="" value="CEO">
<constructor-arg index="" value="公司老大">
</bean>
1.2)setter 注入,这种方式更灵活。上面的例子,需要有无参构造函数,各个属性需要有setter 方法。
<bean id="role" class="Role">
<property name="id" value="">
<property name="roleName" value="CEO">
<property name="note" value="公司老大">
</bean>
2 Spring 的 AOP 是基于动态代理实现的,Spring 的数据库事务是在进入 invoke 方法里面然后判断是否需要拦截,需要的时候才根据注解和配置生成数据库事务切面上下文。
注意:如果在事务里面调用自己其他事务方法,被调用的方法上的注解不起作用,仍然是第一个事务的注解。
是因为自调用是新的代理对象的,是原始对象的调用。所以根本就没有 invoke 方法去解析注解和配置生成数据库切面的上下文,独立事务也无从谈起。
如果想要insertRole 方法配置生效,就需要独立写一个类,再去调用 insertRole 方法。