首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式向Spring应用程序上下文添加Beans

以编程方式向Spring应用程序上下文添加Beans
EN

Stack Overflow用户
提问于 2015-04-17 14:48:26
回答 2查看 8.5K关注 0票数 5

我试图将一个简单的字符串添加到Spring应用程序上下文中,然后将其自动添加到应用程序上下文中的另一个现有bean (A)中。我知道这不是通常的方法,但是我需要以编程的方式添加许多bean,否则我的xml配置就会变得巨大。

代码语言:javascript
运行
复制
public class MyPostProcessor implements BeanFactoryPostProcessor, Ordered {

  @Override
  public int getOrder() {
    return 0;
  }

  @Override
  public void postProcessBeanFactory(
        ConfigurableListableBeanFactory beanFactory) throws BeansException {
    beanFactory.registerSingleton("myString", "this is the String");
    A a = beanFactory.getBean(A.class);
    beanFactory.autowireBean(a);
  }
}    

public class A {

    @Autowired 
    public transient String message;

}

运行此操作时,A实例的属性message为空。我遗漏了什么?

编辑:这是我的应用程序上下文:

代码语言:javascript
运行
复制
@Configuration
class TestConfig {

  @Bean 
  public A a() {
    return new A();
  }

  @Bean
  public MyPostProcessor postProcessor() {
    return new MyPostProcessor();
  }

}

这是我的考验:

代码语言:javascript
运行
复制
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class)
public class MyTest {

  @Autowired 
  private transient A a;

  @Test
  public void test() throws Exception {
    System.err.println("Running");
    System.err.println("This is the autowired String: " + a.message);
    Thread.sleep(1000);
  }

}

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-17 19:59:13

您不应该从BeanFactoryPostprocessors实例化bean。来自BeanFactoryPostProcessor JavaDoc:

BeanFactoryPostProcessor可以与bean定义交互和修改bean定义,但绝不会修改bean实例。这样做可能会导致过早的bean实例化,破坏容器,并导致意外的副作用。

在您的示例中,A bean是在BeanPostProcessors之前实例化的,因此不是自动生成的。

移除线条:

代码语言:javascript
运行
复制
A a = beanFactory.getBean(A.class);
beanFactory.autowireBean(a);

而且会起作用。

票数 1
EN

Stack Overflow用户

发布于 2015-04-17 14:54:53

尝试使用@Qualifier来指定您想要自动连接的bean。

代码语言:javascript
运行
复制
public class A {

    @Autowired 
    @Qualifier("myString")
    public transient String message;

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29702488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档