Spring 为什么可以';从ApplicationContextAware实现的bean访问ApplicationContext

Spring 为什么可以';从ApplicationContextAware实现的bean访问ApplicationContext,spring,springjunit4classrunner,Spring,Springjunit4classrunner,我有一个Spring JUnit tester类MySimpleTester: @ 我得到了NullPointerException并看到ApplicationContext在这里是Null 但是,在SpringJUnitTestRunner上,我可以找到要正确初始化的应用程序上下文。我没有包括mySimpleConfig.xml和包含的文件。MyAdapterclassgetSimpleLinksList()中的方法在web应用程序中运行时工作得非常好,appcontext就是在那里获得的 只

我有一个Spring JUnit tester类
MySimpleTester

@

我得到了
NullPointerException
并看到
ApplicationContext
在这里是
Null

但是,在SpringJUnitTestRunner上,我可以找到要正确初始化的应用程序上下文。我没有包括
mySimpleConfig.xml
和包含的文件。
MyAdapter
class
getSimpleLinksList()
中的方法在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**();
}