gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:45:54 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com