我有一套相当奇怪的情况。我正在使用Spring 3.0.6和一个实现和接口的bean。到目前为止,非常正常的东西。我的bean也有一些受保护的方法。我正在使用一些AOP(JDK Proxies),一切正常。
当我想将这个bean注入另一个包类时,我的问题就出现了。在正常情况下,我将能够注入实现并获得对受保护方法的访问权限。不幸的是,由于它是JDK代理的,我只能基于接口注入。
由于我需要访问受保护的方法,我无法在接口中声明方法,所以我有点处于catch-22状态。我尝试切换到CGLIB代理,但是它们会与其他顾问一起使用最终方法建议bean等等,所以这不是真正的解决方案。
关于我能做什么的任何建议?我已经尝试使用@PostConstruct方法从应用程序上下文中检索bean,但也有(不足为奇)它只能检索Proxied bean,因此无法将其转换为所需的实现。
任何建议都将不胜感激。
谢谢!
埃里克
答案 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方法。
看看是否有效。