在日常的开发过程中,有时候我们需要用到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

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

测试代码

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

运行结果如下:
image.png
两次打印的地址是一样的,所以我们获取到的ApplicationContext是正确的。

其他Aware接口

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


大军
847 声望183 粉丝

学而不思则罔,思而不学则殆