如何在Spring中注入一个具有受保护方法的JDK Proxied类?

时间:2012-04-11 16:41:12

标签: java spring aop cglib

我有一套相当奇怪的情况。我正在使用Spring 3.0.6和一个实现和接口的bean。到目前为止,非常正常的东西。我的bean也有一些受保护的方法。我正在使用一些AOP(JDK Proxies),一切正常。

当我想将这个bean注入另一个包类时,我的问题就出现了。在正常情况下,我将能够注入实现并获得对受保护方法的访问权限。不幸的是,由于它是JDK代理的,我只能基于接口注入。

由于我需要访问受保护的方法,我无法在接口中声明方法,所以我有点处于catch-22状态。我尝试切换到CGLIB代理,但是它们会与其他顾问一起使用最终方法建议bean等等,所以这不是真正的解决方案。

关于我能做什么的任何建议?我已经尝试使用@PostConstruct方法从应用程序上下文中检索bean,但也有(不足为奇)它只能检索Proxied bean,因此无法将其转换为所需的实现。

任何建议都将不胜感激。

谢谢!

埃里克

1 个答案:

答案 0 :(得分:1)

我能想到的解决方案是从代理对象中获取实现。

http://www.techper.net/2009/06/05/how-to-acess-target-object-behind-a-spring-proxy/

如上面的链接“((Advised)proxy).getTargetSource()。getTarget()”返回代理对象的目标实现。现在,您可以将此目标对象转换为Impl类&然后在那个impl类上你可以调用protected方法。

看看是否有效。