前言

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"));
    }
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐