在日常的开发过程中,有时候我们需要用到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());
}
运行结果如下:
两次打印的地址是一样的,所以我们获取到的ApplicationContext是正确的。
其他Aware接口
BeanFactoryAware,可以获取到BeanFactory。
BeanNameAware,可以获取到bean的名称。
等其他不在描述。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。