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

xiaoxiao2021-02-28  159

6 单例注入多例之注入ApplicationContext

Spring bean容器中的bean有单例bean,也有多例bean。当我们需要给一个单例beanA注入一个单例beanB,或者给一个多例beanA注入一个多例或单例beanB时,都可以通过配置让Spring的bean容器帮我们完成。但如果我们需要给一个单例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()方法,对于实现了该接口的bean,Spring将通过调度对应的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所写)

转载请注明原文地址: https://www.6miu.com/read-25236.html

最新回复(0)