是否可以通过某种方式将值从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>
答案 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>