我想在我的clientStub
bean中注入一个bean(叫它service
)。
对此有两个要求:
clientStub
bean,我需要访问@Client
批注,该批注包含一些重要信息,这些信息用于在属性中查找相关配置。@Bean
方法参数注入)预期用途:
@Autowired
public MyService(
@Client("invoice-manager") InvoiceManagerClientStub clientStub,
SomeOtherBean bean1, ...) {
或
@Bean
MyService myService(
@Client("invoice-manager") InvoiceManagerClientStub clientStub,
SomeOtherBean bean1, ...) {
所以我想做与@Value
注释相同的操作,例如从参数的注释(加上一些内部查询)中得出值。
不幸的是,通常的BeanFactory
似乎并不了解目标的注释。
已考虑的替代方案
使用BeanPostProcessor
将值注入带注释的字段中。好吧,这就是我目前正在做的事情,但是使用一个带有单一注入器的不可变类来进行注入是不合适的。
将其注入到字段中,然后将其作为Bean公开或手动调用构造函数更糟。
创建注入类的代理实例。这是不可能的,因为注入的类是+ final生成的,而不是我的库的一部分。
从Bean名称派生配置:不确定如何实现此配置以及如何向用户解释应在其属性文件中命名哪些配置参数。我也想避免bean名称冲突。
非目标
覆盖所有核心bean。我想将扩展作为库(基于spring-boot)进行分发,因此应避免过多更换spring内部bean。
TLDR
如何告诉spring使用注释的值(解析器)解析参数?