在日常的开发过程中,有时候我们需要用到 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 的名称。
等其他不在描述。