刷新Spring ApplicationContext,而无需重新初始化上下文,可能吗?

时间:2012-03-16 09:45:46

标签: java spring applicationcontext

我正在使用JUnit进行一些集成测试。我有一个xml文件,我在其中声明了一些我要注入的模板实体。在每次测试中,我都需要一个全新的应用程序上下文,即没有测试应该依赖于/与其他测试结合,所以在setUp()我需要在默认的起始值上“重新初始化”这些实体。

我可以通过重新加载来实现它,但这样我就无法使用@Autowired注释。

@Before
public void setUp(){        
    ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:entityTemplates-Context.xml");
    homeA = (Home)ctx.getBean("homeA");
}

有没有办法做到这一点,仍然对这些实体使用@Autowired

2 个答案:

答案 0 :(得分:2)

您是否看过Spring对集成测试的支持?

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/testing.html

我的团队将此用于我们需要Spring容器的集成测试。每次测试都会获得一个新的上下文,但这会大大减慢测试速度。

答案 1 :(得分:0)

你也可以像这样手动完成:

  ...
  @Autowired
  HomeA homeA;

  @Before
  public void setUp() {
    // configures this test instance as a regular spring bean
    ctx.getAutowireCapableBeanFactory().autowireBean(this);

    // here homeA is available
  }
  ...