相关疑难解决方法(0)

以编程方式将Bean添加到Spring Web App上下文

由于插件架构,我正在尝试以编程方式将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)

java spring web-applications dynamic

52
推荐指数
3
解决办法
10万
查看次数

根据属性动态注册Spring Bean

我正在使用最新的 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)

java spring spring-boot

7
推荐指数
1
解决办法
5403
查看次数

标签 统计

java ×2

spring ×2

dynamic ×1

spring-boot ×1

web-applications ×1