当我的'普通'bean被创建时,我需要添加一个动态创建的bean。到目前为止我试过这个:
WITH_QT=ON
我以编程方式构建了一个SolrHealthIndicatior bean,因为我没有使用Spring Solr Data。现在我希望它已注册,因此它显示在/ health中。
我的上下文有线,但找不到如何在那里注册新创建的bean ...
答案 0 :(得分:1)
您应该能够使用@Bean
类中的@Configuration
注释以编程方式定义bean。
@Bean
public SolrHealthIndicator solrHealthIndicatior() {
//you can construct the object however you want
return new SolrHealthIndicator();
}
然后您可以像任何其他bean(@Autowired
构造函数,字段,setter注入等)一样注入它,如果有多个bean具有相同类型,则可以使用@Qualifier
来区分它们。
答案 1 :(得分:0)
您需要使用@Lookup
注释。
@Component
public class SolrHealthIndicator {
public SolrHealthIndicator(Solr solr) {
}
}
public class BeanInQuestion {
@PostConstruct
public void init() {
solrHealthIndicator = getHealthIndicatorBean();
}
@Lookup
public SolrHealthIndicator getHealthIndicatorBean() {
//Spring creates a runtime implementation for this method
return null;
}
}
答案 2 :(得分:0)
您可以将该类包含在@PostConstruct
工具BeanDefinitionRegistryPostProcessor
中。然后,您就可以以编程方式注册bean:
@Bean
public class MyBean implements BeanDefinitionRegistryPostProcessor {
private BeanDefinitionRegistry registry;
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
this.registry = registry;
}
@PostConstruct
public void init(){
registry.registerBeanDefinition("solrHealthIndicator", new SolrHealthIndicator(solr));
}
}