2

是否可以通过某种方式将值从 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 中调用方法?

示例应用上下文

<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

4 回答 4

1
@Component
public class Settings {

从 spring 手册中检查Classpath 扫描和托管组件。

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

于 2011-12-08T21:55:51.407 回答
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" />

它涉及创建第三个工厂类,但允许您做您需要的事情。

于 2011-12-08T22:20:30.440 回答
0

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

在此之后,通过 PropertyPathFactoryBean 将属性推入“somethingElse”。此处提供了解释。希望这会有所帮助。

于 2011-12-09T06:46:50.367 回答
0
<bean id="settings" class="com.myCom.settings" />

<bean id="somethingElse" class="com.myCom.somethingElse" />
    <constructor-arg name="something" value="#{settings.something}" />
</bean>
于 2011-12-09T07:26:52.953 回答