我遇到了一系列相当奇怪的情况。我将 Spring 3.0.6 与一个实现和接口(interface)的 bean 一起使用。到目前为止,很正常的事情。我的 bean 也有一些 protected 方法。我正在使用一些 AOP(JDK 代理)并且一切正常。
当我想将这个 bean 注入(inject)另一个包类时,我的问题就来了。在正常情况下,我可以注入(inject)实现并访问 protected 方法。不幸的是,由于它是 JDK 代理的,我只能根据接口(interface)进行注入(inject)。
因为我需要访问 protected 方法,所以我不能在接口(interface)中声明这些方法,所以我有点陷入了一个 catch-22 的境地。我尝试切换到 CGLIB 代理,但它们与其他建议 bean 使用 final 方法等的顾问崩溃,所以这不是真正的解决方案。
关于我可以做什么有什么建议吗?我已经尝试使用 @PostConstruct 方法从应用程序上下文中检索 bean,但同样(不足为奇)它只能检索 Proxied bean,因此无法将其转换为所需的实现。
如有任何建议,我们将不胜感激。
谢谢!
埃里克
最佳答案
我能想到的解决方案是从代理对象中获取实现。
http://www.techper.net/2009/06/05/how-to-acess-target-object-behind-a-spring-proxy/
如上链接“((Advised)proxy).getTargetSource().getTarget()”中给出的那样,返回代理对象的目标实现。现在您可以将此目标对象转换为 Impl 类,然后在该 impl 类上您可以调用 protected 方法。
看看这是否有效。
关于java - 如何在具有 protected 方法的 Spring 中注入(inject) JDK 代理类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10110253/