这是我的 Spring AOP 配置。
<bean id="myObject" class="com.madzone.learn.spring.aop.OriginalClass"></bean>
<bean id="aspect" class="com.madzone.learn.spring.aop.AspectClass"></bean>
<aop:config>
<aop:aspect ref="aspect">
<aop:declare-parents
types-matching="com.madzone.learn.spring.aop.OriginalClass+"
implement-interface="com.madzone.learn.spring.aop.IntroducedInterface"
default-impl="com.madzone.learn.spring.aop.IntroducedInterfaceImpl" />
</aop:aspect>
ApplicationContext context = new ClassPathXmlApplicationContext("myApp.xml");
Object myObject = context.getBean("myObject");
if (myObject instanceof OriginalClass) {
System.out.println("This is OriginalClass");
}
if(myObject instanceof IntroducedInterface) {
System.out.println("This is IntroducedInterface");
}
通过这个介绍,我能够调用引入接口。但是,我无法访问 OriginalClass 的方法。在上面的代码片段中,我从未打印出“This is OriginalClass”。
从“简介”的定义中,我了解到实现新接口的代理将从 OriginalClass 扩展,并使其方法也可访问。
我在这里错过了什么吗?有人可以解释一下原因吗?
PS:
The following is a picture from Spring in Action (3rd Edition) that depicts this.
从“简介”的定义中我了解到代理
实现新接口将从 OriginalClass 扩展并使得
它的方法也可以访问。
我不知道你从哪里得到这样的印象。默认情况下,所有 Spring AOP 都构建于JDK动态代理,仅适用于接口。代理具体类是不可能的。那里isSpring 支持使用 CGLIB 代理来代理类,但它的用途是被参考指南劝阻有利于接口编程以减少耦合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)