2

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

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

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

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

任何建议,将不胜感激。

谢谢!

埃里克

4

1 回答 1

1

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

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

如上面的链接“((Advised)proxy).getTargetSource().getTarget()”中给出的,从代理对象返回目标实现。现在您可以将此目标对象转换为 Impl 类,然后在该 impl 类上调用受保护的方法。

看看这是否有效。

于 2012-10-23T09:35:09.307 回答