Spring 为什么可以';从ApplicationContextAware实现的bean访问ApplicationContext
我有一个Spring JUnit tester类Spring 为什么可以';从ApplicationContextAware实现的bean访问ApplicationContext,spring,springjunit4classrunner,Spring,Springjunit4classrunner,我有一个Spring JUnit tester类MySimpleTester: @ 我得到了NullPointerException并看到ApplicationContext在这里是Null 但是,在SpringJUnitTestRunner上,我可以找到要正确初始化的应用程序上下文。我没有包括mySimpleConfig.xml和包含的文件。MyAdapterclassgetSimpleLinksList()中的方法在web应用程序中运行时工作得非常好,appcontext就是在那里获得的 只
MySimpleTester
:
@
我得到了NullPointerException
并看到ApplicationContext
在这里是Null
但是,在SpringJUnitTestRunner上,我可以找到要正确初始化的应用程序上下文。我没有包括mySimpleConfig.xml
和包含的文件。MyAdapter
classgetSimpleLinksList()
中的方法在web应用程序中运行时工作得非常好,appcontext就是在那里获得的
只有从Spring测试仪才能访问静态应用程序上下文
AppFactory
类,因为它是通过AppFactory.getPropertiesObj()
静态调用的。在其他测试类正在执行时,我已正确设置了类路径。如果要访问MySimpleTester中的当前应用程序上下文:-
public class MySimpleTester {
@Autowired
ApplicationContext applicationContext;
@Before
public void setUp() throws Exception {
myAdapter = (MyAdapter) applicationContext.getBean("myAdapter");
}
@test
public void testGetSimpleList() {
List<SimpleLink> simpleList = **myAdapter.getSimpleLinksList**();
}
公共类MySimpleTester{
@自动连线
应用上下文应用上下文;
@以前
public void setUp()引发异常{
myAdapter=(myAdapter)applicationContext.getBean(“myAdapter”);
}
@试验
public void testGetSimpleList(){
List simpleList=**myAdapter.getSimpleLinkList**();
}
我认为这是在创建多个应用程序上下文时发生的。应用程序上下文对象应该是单例对象。但是当我们从静态方法再次调用应用程序上下文时,它引用的是完全不同的确认。应用程序上下文甚至没有在那里初始化
当从Spring MVC webcontanier调用同一模块时,不会发生这种情况。仅当您尝试使用Spring tester类RunWith(SpringJUnit4ClassRunner.class)时才会发生这种情况。我可以在业务方法中传递AppContext,但我不想更改bsiness方法签名。我在spring社区中发现一些线程存在类似问题。MyAdapter.GetSimpleLinkList()如何编译,因为
AppFactory.getPropertiesObj()
不是静态的?在实际的程序中,我的方法是静态的。在这里编写时,我错过了键入。公共静态字符串getPropertiesObj(){return getAppContext().getBean(“propertiesBean”).toString();}我不明白你的意思。请注意,MySimpleTester是主要的Junit类,所以它需要加载Spring上下文Xmls。所以我确实需要它来运行(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={“classpath:/Spring/mySimpleConfig.xml”})我的要求是在AppFactory类中,它应该获得与主Junit类相同的ApplicationContext。为什么AppFactory无法获得ApplicationContext对象引用且为null???
public MyAdapter {
public List<SimpleLink> getSimpleLinksList() {
List<SimpleLink> simLinks = null;
String environment = AppFactory.getPropertiesObj();
class AppFactory implements ApplicationContextAware {
private static ApplicationContext context;
public void setApplicationContext(ApplicationContext acontext) {
context = acontext;
}
public getPropertiesObj() {
return getAppContext().getBean("propertiesBean");
}
public class MySimpleTester {
@Autowired
ApplicationContext applicationContext;
@Before
public void setUp() throws Exception {
myAdapter = (MyAdapter) applicationContext.getBean("myAdapter");
}
@test
public void testGetSimpleList() {
List<SimpleLink> simpleList = **myAdapter.getSimpleLinksList**();
}