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