java中列表的定义,java - 如何在Spring中定义List bean?

java - 如何在Spring中定义List bean?

我正在使用Spring在我的应用程序中定义阶段。 配置为必要的类(此处称为Configurator)注入阶段。

现在我需要另一个班级的阶段列表,名为LoginBean.Configurator不提供访问他的阶段列表的权限。

我无法改变类Configurator。

我的想法:

定义一个名为Stages的新bean,并将其注入Configurator和LoginBean。我的这个想法的问题是我不知道如何转换这个属性:

...

...

...

成豆。

这样的东西不起作用:

任何人都可以帮我吗?

10个解决方案

266 votes

导入spring util命名空间。 然后您可以按如下方式定义列表bean:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:util="http://www.springframework.org/schema/util"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/util

http://www.springframework.org/schema/util/spring-util-2.5.xsd">

foo

bar

value-type是要使用的泛型类型,并且是可选的。 您还可以使用属性list-class指定列表实现类。

simonlord answered 2019-03-11T05:40:10Z

162 votes

这是一种方法:

stacker answered 2019-03-11T05:40:35Z

33 votes

另一种选择是使用JavaConfig。 假设所有阶段都已注册为spring beans,您只需:

@Autowired

private List stages;

和spring会自动将它们注入此列表中。 如果您需要保留订单(上层解决方案不这样做),您可以这样做:

@Configuration

public class MyConfiguration {

@Autowired

private Stage1 stage1;

@Autowired

private Stage2 stage2;

@Bean

public List stages() {

return Lists.newArrayList(stage1, stage2);

}

}

保留顺序的另一个解决方案是在bean上使用@Order注释。 然后列表将包含按升序注释值排序的bean。

@Bean

@Order(1)

public Stage stage1() {

return new Stage1();

}

@Bean

@Order(2)

public Stage stage2() {

return new Stage2();

}

Jakub Kubrynski answered 2019-03-11T05:41:19Z

29 votes

class="com.somePackage.SomeClass">

在SomeClass中:

class SomeClass {

private List myList;

@Required

public void setMyList(List myList) {

this.myList = myList;

}

}

Koray Tugay answered 2019-03-11T05:41:46Z

8 votes

Stacker提出了一个很好的答案,我会更进一步使其更具动态性并使用Spring 3 EL Expression。

#{springDAOBean.getGenericListFoo()}

我试图找出如何使用util:list来实现这一点,但由于转换错误而无法使其工作。

haju answered 2019-03-11T05:42:19Z

4 votes

我想你可能在寻找。

您声明一个ListFactoryBean实例,提供要实例化为2252339368404714496元素作为其值的属性的列表,并为该bean提供id属性。 然后,每次在声明的id中使用ref或类似的其他bean声明时,都会实例化列表的新副本。 您还可以指定要使用的List类。

Stephen C answered 2019-03-11T05:42:54Z

1 votes

使用util命名空间,您将能够在应用程序上下文中将列表注册为bean。 然后,您可以重用该列表将其注入其他bean定义中。

Juan Perez answered 2019-03-11T05:43:21Z

1 votes

作为Jakub答案的补充,如果您打算使用JavaConfig,您也可以通过这种方式自动装配:

import com.google.common.collect.Lists;

import java.util.List;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Bean;

@Configuration

public class MyConfiguration {

@Bean

public List stages(final Stage1 stage1, final Stage2 stage2) {

return Lists.newArrayList(stage1, stage2);

}

}

Jose Alban answered 2019-03-11T05:43:48Z

0 votes

这是如何在Spring中的一些属性中注入set:

class="biz.bsoft.processing">

Slava Babin answered 2019-03-11T05:44:15Z

0 votes

之后定义那些bean(test1,test2):)

RaM PrabU answered 2019-03-11T05:44:41Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值