我在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
答案 0 :(得分:3)
您肯定必须将其强制转换为代理对象。然后尝试:
Proxy.getTargetSource().getTarget
我真的不知道这是否有效,AOP文档在描述Proxy类的返回类型时非常模糊,它说“返回
”之类的东西答案 1 :(得分:2)
根据目标bean的类层次结构,Spring将生成一个扩展目标bean类的代理(起诉CGLIB),或者它将生成一个代理,该代理实现目标bean的接口。
如果目标bean实现任何接口,则将选择后一个选项。这通常是优选的。我猜你的目标类确实实现了至少一个接口。获取bean的代码是否可以将引用转换为接口类型而不是类?
但是,您可以使用proxy-target-class选项强制Spring AOP生成扩展目标bean类的代理。确切的语法取决于您如何配置AOP,并且您不在问题中指定。