SpringBoot获取ApplicationContext
SpringBoot获取ApplicationContext
前言
ApplicationContext是Spring应用程序中的中央接口,由于继承了多个组件,使得ApplicationContext拥有了许多Spring的核心功能,如获取bean组件,注册监听事件,加载资源文件等。ApplicationContext接口定义如下:
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver{}
-
EnvironmentCapable:获取运行时环境 ListableBeanFactory:获取beanNames的功能 HierarchicalBeanFactory:获BeanFactory的功能 MessageSource:集成消息解析器 ApplicationEventPublisher:事件监听 ResourcePatternResolver:资源解析器
一、@Autowired(@Resouce)注入
@Component public class ApplicationContextProvider1 { @Autowired private ApplicationContext applicationContext; @Bean("user01") public User user(){ return new User("zhangsan",18); } @Bean("printApplicationContext01") public void printApplicationContext(){ System.out.println(applicationContext.getBean("user01")); } }
二、实现ApplicationContextAware接口(推荐)
@Component public class ApplicationContextProvider2 implements ApplicationContextAware { private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @Bean("user02") public User user(){ return new User("lisi",19); } @Bean("printApplicationContext02") public void printApplicationContext(){ System.out.println(applicationContext.getBean("user02")); } }
三、构造器方法注入
利用Spring4.3特性
-
构造函数只能有一个,如果有多个,就必须有一个无参数的构造函数,此时,Spring会调用无参数的构造函数 构造函数的参数,必须在Spring容器中存在 @Component public class ApplicationContextProvider3 { private ApplicationContext applicationContext; public ApplicationContextProvider3(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } @Bean("user03") public User user(){ return new User("wangwu",20); } @Bean("printApplicationContext03") public void printApplicationContext(){ System.out.println(applicationContext.getBean("user03")); } }