gpt4 book ai didi

java - Spring AOP 介绍中丢失了原有的接口(interface)

转载 作者:行者123 更新时间:2023-11-30 07:20:22 25 4
gpt4 key购买 nike

这是我的 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”。

根据“介绍”的定义,我了解到实现新接口(interface)的代理将从 OriginalClass 扩展并使其方法也可访问。

我是不是漏掉了什么?有人可以解释原因吗?

附言: 下面是一张来自 Spring in Action(第 3 版)的图片描述了这一点。 Can the caller access both the interfaces 'Existing method' and 'Introduced method'?

最佳答案

From the definition of 'Introduction' I understood that the proxy that implements the new interface will extend from OriginalClass and make its' methods accessible too.

我不确定您是从哪里得到这种印象的。默认情况下,所有 Spring AOP 都构建在 JDK dynamic proxies 上,它只适用于接口(interface)。代理具体类是不可能的。 Spring 支持使用 CGLIB 代理来代理类,但它的使用是 discouraged by the reference guide支持对接口(interface)进行编程以减少耦合。

关于java - Spring AOP 介绍中丢失了原有的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14089642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com