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