gpt4 book ai didi

java - 选择在 Spring 中引用哪个 bean?

转载 作者:行者123 更新时间:2023-12-02 23:44:38 26 4
gpt4 key购买 nike

我有一个 spring 项目,其中包含一个 bean 定义文件,其中包含一个引用另一个 bean 作为属性的 bean,例如

<bean id="aBean" class="org.test.class">
<property class="org.test.A" autowire="byType"/>
</bean>

此 bean 定义文件将由其他 spring 项目导入,这些项目可能包含也可能不包含扩展 org.test.A 的 bean。

我想做的是,如果 org.test.A 的扩展实现存在(即 org.test.B),我想在属性中引用它,否则只引用 org.test.A .

我一直在对此事进行一些研究,但尚未得出答案。我尝试编写一个自定义 TypeFilter,但这似乎只是让我返回 true 或 false 是否应该返回一个类,而不是检查一个类的所有现有 bean 定义并选择一个。

这样的事情可能吗?如果是这样,人们会如何去做呢?

这个想法是为了避免重写一堆相互引用的 bean 定义(并且在每个项目中大多数情况下都是相同的),而只编写引用的 bean 的实现。

欢迎就此事提供任何意见。

-----更新1------

我已经尝试使用@Primary,但到目前为止还没有成功。没有错误,但正在使用的类不是带有 @Primary 的类。

主类 org.test.A 扩展了另一个类 (org.test.Whatever),然后在我的 servlet 上下文中我有以下内容

<bean id="someID" class="org.someclass">
<property name="realm" ref="testBean" />
</bean>

然后我创建了另一个 org.test.B 类,它扩展了 org.test.A 并同时具有 @Component 和 @Primary,但没有执行。 Spring 似乎正在加载该类,但没有使用它。

-----更新2-----

好吧,我想我知道发生了什么。我 Autowiring 的类(我无法控制源代码)恰好有 2 个设置方法,其中一个采用单个类,另一个采用该类的集合。 Spring似乎认为,因为它找到了同一类的多个bean,所以它应该 Autowiring 采用集合的集合,而不是 Autowiring 采用单个实例的集合。

如何在实例化类的上下文 xml 中指定应 Autowiring 哪个方法?我不明白为什么 spring 不允许我在属性上使用 autowire 属性。我只能在 bean 上设置 Autowiring ,让 spring 选择 Autowiring 的方法。 :S

最佳答案

@Primary注释可能会帮助你。

如果您有超过 1 个实现,则使用带有 @Primary 注释的实现

关于java - 选择在 Spring 中引用哪个 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17788468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com