在日常的开发过程中,有时候我们需要用到getBean的方法,此时,我们想要用ApplicationContext来调用这个方法,那这个ApplicationContext是怎么获取到的呢?

ApplicationContextAware

ApplicationContextAware继承了Aware接口,同时定义了setApplicationContext方法。下面我们看看怎么通过ApplicationContextAware接口获取这个ApplicationContext。
MyApplicationContext

public class MyApplicationContext implements ApplicationContextAware {    ApplicationContext applicationContext;    @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        this.applicationContext = applicationContext;    }    public ApplicationContext getApplicationContext() {        return applicationContext;    }}

MyConfig

@Configurationpublic class MyConfig {    @Bean    public MyApplicationContext myApplicationContext() {        return new MyApplicationContext();    }}

测试代码

@Testpublic void test(){    ApplicationContext app = new AnnotationConfigApplicationContext(MyConfig.class);    MyApplicationContext myApplicationContext =app.getBean("myApplicationContext",MyApplicationContext.class);    System.out.println(app);    System.out.println(myApplicationContext.getApplicationContext());}

运行结果如下:

两次打印的地址是一样的,所以我们获取到的ApplicationContext是正确的。

其他Aware接口


BeanFactoryAware,可以获取到BeanFactory。
BeanNameAware,可以获取到bean的名称。
等其他不在描述。