Spring将POJO中的值加载到App上下文中

时间:2011-12-08 21:53:41

标签: java spring autowired spring-annotations

是否可以通过某种方式将值从POJO加载到Spring appcontext.xml中?

例如,我有一个类似的POJO,

public class Settings {
    private String appSetting;
    getMethod;
    setMethod;

public class Main {
    @Autowired
    private Settings setting

    @Autowired
    private SomethingElse somethingElse
}

最终目标是我希望somethingElse使用设置值自动装配。有没有办法做到这一点,因为我相信你不能在Spring中调用方法?

示例appContext

<bean id="settings" class="com.myCom.settings" />

<bean id="somethingElse" class="com.myCom.somethingElse" />
    <constructor-arg name="something" value="VALUE FROM SETTINGS.GET" />
</bean>

4 个答案:

答案 0 :(得分:1)

@Component
public class Settings {

从弹簧手册中查看Classpath scanning and managed components

<强>更新 您也可以使用SpEL。您甚至可以将applicationContext.xml@Autowired混合使用,例如按名称或类型连接。

答案 1 :(得分:1)

您可以在应用程序上下文中注册Settings组件,然后创建第三个类,它是用于生成SomethingElse类的实例的工厂。然后,您可以将Settings组件连接到工厂,以便在构造SomethingElse类的实例时可以获取所需的值。像这样:

<bean id="mySettings" class="Settings">
  <property name="importantValue" value="whatever" />
</bean>

<bean id="mySomethingElseFactory" class="SomethingElseFactory">
  <property name="settings" ref="mySettings" />
</bean>

最后,您可以将应用程序上下文中的SomethingElse组件初始化为从这样的工厂方法派生的bean:

<bean id="mySomethingElse" factory-bean="mySomethingElseFactory" factory-method="getASomethingElse" />

它涉及创建第三个工厂类,但可以让你做你需要的工作。

答案 2 :(得分:0)

我没试过这个,但PropertyPathFactoryBean应该可以帮到你。您可以使用@Component注释pojo并使用名称“settings”来访问它,或者可以在完成后在配置文件中定义bean。

之后,通过PropertyPathFactoryBean将属性推送到“somethingElse”。提供了解释here。希望这有帮助。

答案 3 :(得分:0)

<bean id="settings" class="com.myCom.settings" />

<bean id="somethingElse" class="com.myCom.somethingElse" />
    <constructor-arg name="something" value="#{settings.something}" />
</bean>