我已经在 bean 上配置了 Spring-AOP。
当我访问这个 bean 时,它会返回一个 spring 代理类而不是实际的 bean。
有什么办法可以得到真正的豆子吗?
应用程序上下文.xml
<bean id="abc" class="abc.java" />
一些.java
abc a = (abc)applicationContext.getBean("abc")
这抛出:
java.lang.ClassCastException: $Proxy19
对于初学者,您肯定必须将其转换为代理对象。然后尝试:
Proxy.getTargetSource().getTarget
我真的不知道这是否可行,AOP 文档在描述代理类的返回类型时非常模棱两可,它说诸如“返回
根据目标 bean 的类层次结构,Spring 将生成一个扩展目标 bean 类的代理(使用 CGLIB),或者生成一个仅实现目标 bean 接口的代理。
如果您的目标 bean 实现了任何接口,则将选择后一个选项。这通常是优选的。我猜你的目标类确实实现了至少一个接口。获取 bean 的代码能否将引用转换为接口类型而不是类?
但是,您可以使用 proxy-target-class 选项强制 Spring AOP 生成扩展目标 bean 类的代理。确切的语法取决于您如何配置 AOP,并且您没有在问题中指定这一点。