欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring(06)——单例注入多例之ApplicationContext

程序员文章站 2022-04-15 16:37:41
...

6 单例注入多例之注入ApplicationContext

Spring bean容器中的bean有单例bean,也有多例bean。当我们需要给一个单例beanA注入一个单例beanB,或者给一个多例beanA注入一个多例或单例beanB时,都可以通过配置让Springbean容器帮我们完成。但如果我们需要给一个单例beanA注入一个多例beanB时,仅仅通过配置Spring是无法帮我们的单例beanA注入一个多例beanB的,即无法让我们每次使用beanB时都使用的是一个全新的beanB。因为beanA只初始化一次,相对应的Spring只会给beanA注入一个beanB。解决办法是给beanA注入一个ApplicationContext,这样我们就可以在每次需要使用beanB时都从ApplicationContext中获取一个新的beanB
注入ApplicationContext有两种方式,实现ApplicationContextAware接口和通过@Autowired@Resource注解标注让Spring进行自动注入。

6.1 实现ApplicationContextAware接口

ApplicationContextAware接口中定义了一个setApplicationContext()方法,对于实现了该接口的beanSpring将通过调度对应的setApplicationContext()方法将当前ApplicationContext传递过去。

public class Hello implements ApplicationContextAware {
	
	private ApplicationContext applicationContext;

	/**
	 * Spring将通过该方法给我们的bean注入当前的ApplicationContext
	 */
	public void setApplicationContext(ApplicationContext applicationContext) {
		this.applicationContext = applicationContext;
	}
	
}

6.2 通过注解标注

我们知道在使用注解进行配置时,我们也可以通过注解来告诉Spring要为当前的bean注入哪些内容。对于ApplicationContext也是一样的,我们可以通过对应的注解来告诉Spring将为我们注入对应的ApplicationContext。自动注入的注解可以是@Resource,也可以是@Autowired

public class Hello {
	
	private ApplicationContext applicationContext;

	@Resource
	public void setApplicationContext(ApplicationContext applicationContext) {
		this.applicationContext = applicationContext;
	}
	
}

(注:本文是基于Spring4.1.0所写)