先钩后@Autowire(构造函数和变量)?

Hook before @Autowire (constructor and variable)?

提问人:nauni77 提问时间:10/17/2023 最后编辑:jonrsharpenauni77 更新时间:10/17/2023 访问量:38

问:

是否有可能在每次自动接线之前执行一些代码(用于方法和变量自动接线)?因为在某些情况下,我想在此自动接线/注入发生之前添加一个主要组件。

我有不同的服务实现相同的接口(业务实现、rest 客户端等)。现在,这取决于应该使用哪种实现的几种情况。因此,我实现了一个动态创建的代理服务(用@Primary注释)。目前,这是在“BeanDefinitionRegistryPostProcessor”上完成的 - 但我需要扫描所有组件,这需要一些时间。

我想避免这种情况并想动态创建这个代理 - 我尝试在“postProcessBeforeInitialization”添加代理。但是,如果应该注入尚未创建的 bean,则会出现问题 - 因为有多个可能的实例,并且没有一个是@Primary的(因为如果没有初始化此组件,我的代理在自动接线的这一刻丢失)。

java spring-boot 自动连线 动态代理

评论

1赞 Jorn 10/17/2023
我想如果你使用方法注入是可能的。但这听起来更像是应该在配置端处理的事情。例如,是否可以将此主要组件添加为注入的依赖项?
0赞 M. Deinum 10/17/2023
现在这取决于几种情况,感觉与其添加代理并做很多这种复杂性,为什么不编写自己的条件来选择实现而不是代理。仅创建您需要的实例。
0赞 nauni77 10/23/2023
@Jorn : 感谢您的回答。是的,目前我已经在配置阶段进行了扫描。甚至创建和插入主代理 Bean。这可行,但我想即时执行此操作(避免扫描) - 但目前我认为有可能在配置阶段之后解决这个问题。
0赞 nauni77 10/23/2023
@M. Deinum : 谢谢你的回答。这是一个非常动态的应用程序,代理实例决定应该请求哪个远程服务器(或者,如果没有远程服务,则可能是本地服务,并且该服务存在于本地)。因此,所有 bean 都需要在那里,我只需在请求期间选择正确的 bean(并配置它)。也许下一个请求将针对不同的服务器(因为轮询、负载平衡或仅仅因为其中一个遥控器关闭)。使用条件语句是个好主意,但我认为这并不能解决我的问题。
0赞 M. Deinum 10/24/2023
那么代理也帮不了你,你需要在某种程度上实现这个逻辑,而不是把它隐藏在注释中,反射/aop 只是把它写在一个做你想做的类中。

答: 暂无答案