注入非bean属性的最佳实践

时间:2018-07-04 08:35:39

标签: java spring dependency-injection

我有一个要转换为弹簧单例的对象,该对象包含一个在初始化后要注入的属性。该属性不能作为bean初始化,我希望可以从代码中检索它。

public class BigObject{
    private SmallObject prop;
}

我添加了以下bean:

<bean id="BigObject" class="com.cisco.cpm.lsd.SessionPublisher"
      scope="singleton" init-method="init"  destroy-method="destroy" lazy-init="true">                
</bean>

是否有初始化prop的最佳实践方法?
我知道可以通过属性工厂方法来完成

<property name="prop">
    <bean factory-bean="SmallObjectFactory" factory-method="getSmallObject"></bean>
</property>

但这需要我为该属性初始化添加一个新对象。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

如果我正确理解了您的问题,则应该可以执行以下操作。首先创建一个@Configuration公开您的SmallObject bean:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class YourConfiguration {
    @Bean
    public SmallObject getSmallObject() {
        // create a new SmallObject
        return new SmallObject();
    }
}

然后,在要注入SmallObject的BigObject中,您可以执行以下操作:

import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;

@Component
public class BigObject {
    private SmallObject smallObject;

    @Autowired
    public BigObject(SmallObject smallObject) {
        this.smallObject = smallObject;
    }
}

希望这会有所帮助!