最近刚学Spring AOP,遇到一个问题
是这样的,有两个类A,B
public class A{
private B b;
......
}
public class B implements C{
private String name;
......
}
我的配置文件里是这样写的
<bean id="b" class="cn.pojo.B" p:name="Jamie"></bean>
<bean id="a" class="cn.pojo.A" p:b-ref="b"></bean>
单单这个是没问题的
但是一旦为B类加上增强后(我加的是前置增强和后置增强)
增强代码没问题,单独测试的时候有效果,但是只要一加上创建A的bean的代码时,就会报错,显示无法创建A的bean实例,但是为什么我只要把A类里对B的引用的类型换成接口类型就可以了呢?
(就是private C b;)
然后我又测试了一下,干脆不要接口了,直接写,也不报错了,怎么又接口的时候,对于被增强的类的引用,它的类型要写接口类型呢?
<bean id="aop1" class="com.duan.AOP1"></bean>
<aop:config>
<aop:aspect ref="aop1">
<aop:pointcut expression="execution(* com.pojo.*.*(..))" id="rpointer"/>
<aop:before method="before" pointcut-ref="rpointer"/>
<aop:after method="after" pointcut-ref="rpointer"/>
</aop:aspect>
</aop:config>