3

我已经在 bean 上配置了 Spring-AOP。

当我访问这个 bean 时,它会返回一个 spring 代理类而不是实际的 bean。

有什么办法可以得到真正的豆子吗?

应用程序上下文.xml

<bean id="abc" class="abc.java" />

一些.java

abc a = (abc)applicationContext.getBean("abc")

这抛出:

java.lang.ClassCastException: $Proxy19

4

2 回答 2

3

对于初学者,您肯定必须将其转换为代理对象。然后尝试:

Proxy.getTargetSource().getTarget

我真的不知道这是否可行,AOP 文档在描述代理类的返回类型时非常模棱两可,它说诸如“返回

于 2009-05-29T13:51:04.013 回答
2

根据目标 bean 的类层次结构,Spring 将生成一个扩展目标 bean 类的代理(使用 CGLIB),或者生成一个仅实现目标 bean 接口的代理。

如果您的目标 bean 实现了任何接口,则将选择后一个选项。这通常是优选的。我猜你的目标类确实实现了至少一个接口。获取 bean 的代码能否将引用转换为接口类型而不是类?

但是,您可以使用 proxy-target-class 选项强制 Spring AOP 生成扩展目标 bean 类的代理。确切的语法取决于您如何配置 AOP,并且您没有在问题中指定这一点。

于 2009-06-01T11:15:55.603 回答