Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何限制@primarybean的上下文?_Java_Spring_Dependency Injection_Inject - Fatal编程技术网

Java 如何限制@primarybean的上下文?

Java 如何限制@primarybean的上下文?,java,spring,dependency-injection,inject,Java,Spring,Dependency Injection,Inject,我在MyProject1中的appContext中定义了一个名为MyBean的bean 我在另一个应用程序中注入了MyProject1的所有bean定义(包括MyBean) 现在我需要覆盖这个bean,但是没有简单的方法,所以在MyProject2中我做了 <bean primary="true" class=MyBean /> 它工作得很好,我的问题是 其他所有使用MyBean的用户会发生什么?现在将使用primary=true的新bean,或者我如何指定哪个应该使用这个新b

我在MyProject1中的appContext中定义了一个名为MyBean的bean

我在另一个应用程序中注入了MyProject1的所有bean定义(包括MyBean)

现在我需要覆盖这个bean,但是没有简单的方法,所以在MyProject2中我做了

<bean primary="true" class=MyBean />

它工作得很好,我的问题是

其他所有使用MyBean的用户会发生什么?现在将使用primary=true的新bean,或者我如何指定哪个应该使用这个新bean,哪个应该继续使用旧bean?

只有在有一些候选注入时才使用Following
primary
bean。所有创建的bean都在上下文中

如果只需要注入主bean,可以使用:

@Autowired
private MyBean myBean;
因此,所有旧的bean都将被主bean替换

如果您需要处理所有
MyBean
bean(例如,您需要
Chain Of responsibility
),您可以注入:

@Autowired
private List<MyBean> myBeans;
@Autowired
私有列表myBeans;
注入的对象将包含所有bean实例(主实例和非主实例)。和往常一样,可以通过
0
index:
mybean.get(0)
从列表中访问主bean。所有可选标记(例如,按
vendorType
..)来检测您需要的bean,您应该在代码筛选集合中指定并处理,但通常情况下,如果项目架构没有问题,您不需要在集合中生成可选标记筛选bean对象

如果您的上下文中只需要一个bean,请不要忘记
singleton

如果您指定了不同的bean唯一名称,您可以使用(有时使用JavaAPI
javax.annotation.Resource
中的
@Resource
)将对应名称指定为参数来按名称检测bean


Spring提供了使用注入属性的能力。可能他们还将提供新的功能来使用注入bean(它可以以最佳方式帮助您解决问题)。

使用或
@Qualifier
用于解决autowire的冲突,而不是禁用除一个之外的所有功能。使用
@Qualifier
时,所有候选bean仍处于活动状态

使用profiles,当您想使用project2中的bean时,只需使用profile=project2启动应用程序;上面的链接描述了实现这一点的多种方法


查看我的答案,了解使用
@Conditional

的完整示例您使用的是Spring Boot吗?如果是,我可以给你更多的选择。不,我没有使用弹簧靴