これが私の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");
}
この導入により、IntroducedInterfaceのメソッドを呼び出すことができました。しかし、OriginalClass のメソッドにアクセスできませんでした。上記のコード スニペットでは、「This is OriginalClass」が出力されませんでした。
「はじめに」の定義から、新しいインターフェイスを実装するプロキシは OriginalClass から拡張され、そのメソッドにもアクセスできるようになることがわかりました。
ここで何か不足していますか?もしあれば、誰かが理由を説明できますか?
PS: 以下は、Spring in Action (第 3 版) の写真です。