由于插件架构,我正在尝试以编程方式将bean添加到我的webapp中.我有一个通过@Component注释创建的Spring bean ,我正在实现该ApplicationContextAware接口.
我的覆盖功能如下所示:
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
// this fails
this.applicationContext = (GenericWebApplicationContext) applicationContext;
}
Run Code Online (Sandbox Code Playgroud)
基本上,我无法弄清楚如何将bean添加到setApplicationContext的applicationContext对象.任何人都可以告诉我我是怎么做错的方式吗?
好的,这就是我最终得到的解决方案:
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr)
throws BeansException {
BeanDefinition definition = new RootBeanDefinition(
<My Class>.class);
bdr.registerBeanDefinition("<my id>", definition);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用最新的 Spring Boot 版本,并尝试根据文件中定义的内容动态创建 n 个 bean application.yaml。然后我想根据 bean 名称将这些 bean 注入到其他类中。
下面的代码是我想要实现的目标的一个非常简化的示例。自动配置通常是 spring boot starter 库的一部分,因此需要注册的 bean 数量未知。
@Slf4j
@Value
public class BeanClass {
private final String name;
public void logName() {
log.info("Name: {}", name);
}
}
Run Code Online (Sandbox Code Playgroud)
@Component
@RequiredArgsConstructor
public class ServiceClass {
private final BeanClass fooBean;
private final BeanClass barBean;
public void log() {
fooBean.logName();
barBean.logName();
}
}
Run Code Online (Sandbox Code Playgroud)
@Value
@ConfigurationProperties
public class BeanProperties {
private final List<String> beans;
}
Run Code Online (Sandbox Code Playgroud)
@Configuration
public class AutoConfiguration {
// Obviously not …Run Code Online (Sandbox Code Playgroud)