使用Spring,可以通过接口类注入bean列表,如:
@Component
public class Service {
@Autowire
private List<InterfaceType> implementingBeans;
...
}
实现此接口的所有已定义bean都将出现在此列表中。
基于注释的方法对我来说是不可能的,因为服务类在一个模块中,不能有Spring依赖关系。
我需要通过xml配置从外部使用这种机制。
<bean id="service" class="...Service">
<property name="implementingBeans">
??? tell spring to create a list bean that resolves all beans of the interfaceType.
</property>
</bean>
有人知道怎么解决这个问题吗?
编辑:此外,有不止一个Spring应用程序使用此服务。所以最好的解决方案是完全通过xml配置来处理这个szenario。然后,我可以将xml部分复制到所有需要它的spriong应用程序。
我希望避免使用一种初始化bean,它将服务注入,然后必须复制到所有Spring应用程序。
亲切的问候。
只有XML的解决方案只需声明一个
控制bean属性是否"自动生成"。这是一个自动过程,其中bean引用不需要在XML bean定义文件中显式编码,而是由Spring容器计算依赖关系。
[...]
解释有点混乱,因为我们期望多个
InterfaceType
bean,但是实际字段的类型是List
,Spring将能够动态实例化一个,并将所有的InterfaceType
bean添加到其中,然后注射它。
您的XML将简单地看起来像
<bean id="service" class="...Service" autowire="byType">
</bean>
我最初建议的解决方案使用了SpEL。
在具有Spring依赖项的模块中,创建一个DTO
@Component(value = "beanDTO")
public class BeanDTO {
@Autowire
private List<InterfaceType> implementingBeans;
public List<InterfaceType> getImplementingBeans() {
return implementingBeans;
}
}
然后使用SpEL从
beanDTO
bean中检索实现Beans
的值。
<bean id="service" depends-on="beanDTO" class="...Service">
<property name="implementingBeans" value="{beanDTO.implementingBeans}" />
</bean>
Spring将创建
BeanTDO
bean,注入所有类型为InterfaceType
的bean。然后它将创建服务
bean,并将其属性从bean设置为
的
实现bean
属性。
以下是对问题的评论:
为了更符合JSR330,Spring引入了对JavaEE的
javax的支持。注入
包。现在,您可以使用@javax注释注入目标。注射注入
而不是@Autowired
。同样,可以使用@Named
而不是@Component
。文件中有更多细节。
问题内容: 我有一类具有类型的对象列表。 我的弹簧配置看起来像这样。 现在,可以在列表中自动自动连接所有类型的bean,而不是显式连接列表中的每个守护程序实现。我要解决的问题是,如果有人创建了类的新实现的bean,却忘记将其连接到列表中。 我已经在stackoverflow上的某个地方看到了这个问题,但无法再次找到它。对此表示歉意。 问题答案: 它应该像这样工作(从您的XML中删除ArrayLis
我是Spring的新手。我正面临Spring-Boot的问题。我正在尝试将外部配置文件中的字段自动装配到自动装配的bean中。我有以下类 应用程序。Java语言 AppConfig。Java语言 服务接口 服务1 我无法在App类的postconstruct方法中显示服务名称变量。我这样做对吗?
我正在使用Spring配置文件(xml配置)进行Spring自动布线。我想根据一个条件注射豆子。让我详述一下。 有两个类“”和“”,它们实现了接口。在配置文件中为这两个类配置了bean。 > 我有另一个类,其中有一个类型为的实例变量。 我想根据SenderUser.getType()的值将注入到SenderUser的bean中。这意味着首先应该设置sernderuser.type,然后基于它的值(
我通过Spring Boot 1.1.8使用Spring 4,并创建了一个类来缓存一些数据。这个类依赖于泛型来工作,但我在Spring和将这个类自动连接为另一个服务中的bean方面遇到了问题。 我会遇到如下错误: 所涉及的班级: 类BaseRepository扩展JpaRepository如下。其他实际存储库扩展了这个。 BaseWithName类是一个MappedSuperclass,它定义名称
我正在使用Swing和Spring创建一个金融应用程序。在应用程序的一部分中,我有一个,其中包含应用程序中每个的。单击时,我希望在中显示类型的。这都是在下面的控制器中执行的。 会为每个点击更改,因此我将设置为一个原型bean,因此我将为每个帐户接收一个新实例。为了使原型作用域工作,我需要使用。以下是代码: 您将注意到我试图自动连接类型的bean。但是,该bean没有正确地自动连接,它是空的。以下是
问题内容: 可以与列表一起使用吗? 就像我有带有mimetypes的属性文件,而在我的班级文件中,我有类似的东西 问题答案: Spring 4支持自动收集给定类型的所有bean并将其注入到集合或数组中的能力。 例: