Spring AOP - 如何投射代理bean?

时间:2009-05-29 09:43:13

标签: spring aop

我在bean上配置了Spring-AOP。

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

我有什么方法可以获得实际的bean吗?

的applicationContext.xml

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

some.java

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

这引发:

java.lang.ClassCastException: $Proxy19

2 个答案:

答案 0 :(得分:3)

您肯定必须将其强制转换为代理对象。然后尝试:

Proxy.getTargetSource().getTarget

我真的不知道这是否有效,AOP文档在描述Proxy类的返回类型时非常模糊,它说“返回

”之类的东西

答案 1 :(得分:2)

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

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

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