在日常的开发过程中,有时候我们需要用到 getBean
的方法,此时,我们想要用ApplicationContext来调用这个方法,那这个ApplicationContext是怎么获取到的呢?
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是正确的。
BeanFactoryAware,可以获取到BeanFactory。
BeanNameAware,可以获取到bean的名称。
等其他不在描述。