我正在使用Spring在我的应用程序中定义阶段.它被配置为必要的类(这里称为Configurator
)注入阶段.
现在我需要另一个名为的阶段列表LoginBean
.在Configurator
不提供访问其阶段的名单.
我不能改变班级Configurator
.
我的想法:
定义一个名为Stages的新bean并将其注入Configurator
和LoginBean
.我的这个想法的问题是我不知道如何转换这个属性:
<property ...>
<list>
<bean ... >...</bean>
<bean ... >...</bean>
<bean ... >...</bean>
</list>
</property>
Run Code Online (Sandbox Code Playgroud)
成豆.
这样的东西不起作用:
<bean id="stages" class="java.util.ArrayList">
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我吗?
sim*_*ord 274
导入spring util命名空间.然后您可以按如下方式定义列表bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<util:list id="myList" value-type="java.lang.String">
<value>foo</value>
<value>bar</value>
</util:list>
Run Code Online (Sandbox Code Playgroud)
value-type是要使用的泛型类型,并且是可选的.您还可以使用该属性指定列表实现类list-class
.
sta*_*ker 168
这是一种方法:
<bean id="stage1" class="Stageclass"/>
<bean id="stage2" class="Stageclass"/>
<bean id="stages" class="java.util.ArrayList">
<constructor-arg>
<list>
<ref bean="stage1" />
<ref bean="stage2" />
</list>
</constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)
Jak*_*ski 34
另一种选择是使用JavaConfig.假设所有阶段都已注册为spring beans,您只需:
@Autowired
private List<Stage> stages;
Run Code Online (Sandbox Code Playgroud)
和spring会自动将它们注入此列表中.如果您需要保留订单(上层解决方案不这样做),您可以这样做:
@Configuration
public class MyConfiguration {
@Autowired
private Stage1 stage1;
@Autowired
private Stage2 stage2;
@Bean
public List<Stage> stages() {
return Lists.newArrayList(stage1, stage2);
}
}
Run Code Online (Sandbox Code Playgroud)
保留顺序的另一个解决方案是@Order
在bean上使用注释.然后列表将包含按升序注释值排序的bean.
@Bean
@Order(1)
public Stage stage1() {
return new Stage1();
}
@Bean
@Order(2)
public Stage stage2() {
return new Stage2();
}
Run Code Online (Sandbox Code Playgroud)
Kor*_*gay 31
<bean id="someBean"
class="com.somePackage.SomeClass">
<property name="myList">
<list value-type="com.somePackage.TypeForList">
<ref bean="someBeanInTheList"/>
<ref bean="someOtherBeanInTheList"/>
<ref bean="someThirdBeanInTheList"/>
</list>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
在SomeClass中:
class SomeClass {
private List<TypeForList> myList;
@Required
public void setMyList(List<TypeForList> myList) {
this.myList = myList;
}
}
Run Code Online (Sandbox Code Playgroud)
Stacker提出了一个很好的答案,我会更进一步使其更具动态性并使用Spring 3 EL Expression.
<bean id="listBean" class="java.util.ArrayList">
<constructor-arg>
<value>#{springDAOBean.getGenericListFoo()}</value>
</constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)
我试图找出如何使用util:list来实现这一点,但由于转换错误而无法使其工作.
归档时间: |
|
查看次数: |
329011 次 |
最近记录: |