在@Configuration类中使用Spring XML配置的bean,并将bean用作另一个bean的factory-bean

时间:2016-04-24 14:07:02

标签: java spring dependency-injection factory-pattern

我在Spring XML中有以下bean配置,它读取了一些属性文件。 然后我使用bean serverPropertyLoader 作为factory-bean,通过factory-method创建另一个类型为 java.util.Properties 的bean serverProperties 。我在下一个配置中将bean serverProperties 传递给 org.springframework.context.support.PropertySourcesPlaceholderConfigurer ,以允许spring处理属性注入。

<bean name="serverPropertyLoader" class="com.xxx.utils.ServerPropertyLoader">
    <constructor-arg name="propertyFiles">
        <list>
            <value>config.properties</value>
        </list>
    </constructor-arg>
</bean>

<bean id="serverProperties" factory-bean="serverPropertyLoader" factory-method="getProperties" />

<bean id="propertyPlaceholder" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="propertiesArray">
        <list>
            <ref bean="serverProperties" />
            <ref bean="databaseProperties" /> <!-- Another Type of Properties -->
        </list>
    </property>
</bean>

现在我想在Spring Java Configuration中使用 serverPropertyLoader serverProperties 来创建bean时读取一些属性,如下所示。

@Configuration
public class DataAccessConf {

    @Autowired
    private ServerPropertyLoader serverPropertyLoader;

    @Autowired
    private Properties serverProperties;

    @Bean(name = "dataSource")
    public javax.sql.DataSource datasource() {

        // want to use serverPropertyLoader or serverProperties here

        return new DataSource(...);
    }
}

serverPropertyLoader serverProperties 均为空。我怎样才能自动装配其中一个。春季版:4.1.6.RELEASE

1 个答案:

答案 0 :(得分:0)

Spring不知道,bean'dataSource'需要'serverProperties'和'serverPropertyLoader'。 所以它试图在另一个自动装配之前创建'dataSource'。 这不是人们所期望的,但我遇到了类似的情况,

将数据源的签名更改为

500

Spring将路径参数,使用参数而不是字段,这应该起作用。