如何在junit @BeforeClass静态方法中访问spring ApplicationContext?

时间:2015-04-07 16:37:58

标签: java spring

我试图通过:

private static ApplicationContext applicationContext;
@Autowired
    public static void setApplicationContext(ApplicationContext applicationContext) {
        AuditorTest.applicationContext = applicationContext;
    }

但它并不像所有其他尝试那样有效。

如何自动装配静态ApplicationContext

2 个答案:

答案 0 :(得分:3)

您无法在static方法上自动装配spring bean。您已将其设为实例方法,并让它将值分配给static变量(可以正常工作):

@Autowired
public void setApplicationContext(ApplicationContext applicationContext) {
    AuditorTest.applicationContext = applicationContext;
}

但我不认为这是你想要的。我想您应该使用SpringJUnitRunner@ContextConfiguration对测试类进行注释,然后您就可以在那里自动装配ApplicationContext

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(...)  // configuration location
public class TestClass {
    @Autowired
    private ApplicationContext context;
}

答案 1 :(得分:0)

可能你现在可能已经想出了一个解决方法。 可以帮助其他人。

我碰到了类似的问题。大多数spring框架选项 提供不允许ApplicationContext的静态访问。

解决方法很简单。使用创建自己的ApplicationContext ClassPathXmlApplicationContext使用bean配置但静态。

<code>
public class BaseTestCase {
    static {
        ApplicationContext context = new ClassPathXmlApplicationContext("test-config.xml"); 
             // Do what you want to do with the context
             // Probably store in static variable to access somewhere else
         }  
    }
</code>