java - 如何在具有 protected 方法的 Spring 中注入(inject) JDK 代理类?

标签 java spring aop cglib

我遇到了一系列相当奇怪的情况。我将 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/

相关文章:

java - 如何使用注释将 struts2 Action 的实例化委托(delegate)给 spring

c# - NServiceBus 中的 AoP 支持?

java - 具有 super 方法调用的继承方法的切入点

java - 在String java中获取图标包路径

java - JAXB REST PUT 引用关联

java - 如何通过首先搜索整个单词来进行子串?

java - 使用 around advice 取消方法执行并在方面内手动执行此方法

java - 使用 REST 请求表中记录数的最佳方法

java - 为什么不在 spring boot 中接收可分页的详细信息?

spring - 使用 spring-test-mvc jsonpath 进行测试返回 null