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")); } }
经验分享 程序员 微信小程序 职场和发展