java如何为来自不同属性文件的bean列表配置Spring配置?
我有可用的SpringXML配置,我想将其移动到Annotation配置
问题是如何从不同的属性文件创建不同的bean
以下是XML片段:
<bean id="auditorium1" class="net.lelyak.edu.entity.Auditorium"
c:name="${auditorium1.name}" c:numberOfSeats="${auditorium1.number-of-seats}"
c:vipSeats="${auditorium1.vip-seats}"/>
<bean id="auditorium2" class="net.lelyak.edu.entity.Auditorium"
c:name="${auditorium2.name}" c:numberOfSeats="${auditorium2.number-of-seats}"
c:vipSeats="${auditorium2.vip-seats}"/>
<bean id="auditorium3" class="net.lelyak.edu.entity.Auditorium"
c:name="${auditorium3.name}" c:numberOfSeats="${auditorium3.number-of-seats}"
c:vipSeats="${auditorium3.vip-seats}"/>
<util:list id="auditoriumsList">
<ref bean="auditorium1"/>
<ref bean="auditorium2"/>
<ref bean="auditorium3"/>
</util:list>
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean" />
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:properties/auditorium1.properties</value>
<value>classpath:properties/auditorium2.properties</value>
<value>classpath:properties/auditorium3.properties</value>
<value>classpath:db/dp.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true"/>
<property name="systemPropertiesMode">
<util:constant
static-field="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
</property>
</bean>
属性文件示例:
auditorium1.name=yellow
auditorium1.number-of-seats=150
auditorium1.vip-seats=1,2,3,4,5,6,7,8,9
我想将其移动到注释配置,比如:
@Configuration
public class AuditoriumConfiguration {
@Bean
public Auditorium auditorium1() {
return new Auditorium();
}
@Bean
public Auditorium auditorium2() {
return new Auditorium();
}
@Bean
public Auditorium auditorium3() {
return new Auditorium();
}
@Bean
public List<Auditorium> auditoriumsList() {
return Arrays.asList(auditorium1(), auditorium2(), auditorium3());
}
@Bean
public ConversionService conversionService() {
return new DefaultConversionService();
}
}
这里是波乔礼堂:
@Component
public class Auditorium {
private Integer id;
private String name;
private Integer numberOfSeats;
private Set<Integer> vipSeats;
// get / set
如何为每个属性文件创建不同的礼堂实例
我想我可以使用@Value
,但我找不到每个属性文件的方法创建对象
有什么建议吗
# 1 楼答案
首先,不需要列表,如果需要类型列表,只需向集合中添加
@Autowired
,spring就会将该bean的所有类型注入该集合要获取属性,可以使用
Environment
,您可能需要为此添加一个helper/factory方法默认情况下已配置转换服务,因此无需添加该服务
要加载配置文件,请将
@PropertySource
添加到配置类中。如果需要@Value
或替换占位符,则需要添加一个PropertySourcesPlaceholderConfigurer
作为static
bean基本上,像这样的事情应该能实现你想要的
现在,如果您想要这些类的列表,只需添加一个
List<Auditorium>
,spring就会将所有依赖项注入该列表# 2 楼答案