我有一个由Spring管理的配置对象。我们将该对象称为“ ConfigurationObject”。我还希望通过委托使该对象包含的配置在我使用“ new”运算符实例化的对象中进行访问。让我们将这些对象称为“ UserObject”。 然后可以将configurationObject作为参数传递给UserObject的构造函数,然后将其分配给不受Spring管理的常规私有字段吗?这样我就可以使用ConfigurationObject从UserObject返回配置。有关代码中的故事,请参见下文。
@Configuration
public class ConfigurationObject {
private final String configItem;
public ConfigurationObject(@Value("${config.item}") final String configItem){
this.configItem = configItem;
}
public String getConfigItem() {
return configItem;
}
}
public final class UserObject {
private ConfigurationObject configurationObject;
/* other properties */
public UserObject(final ConfigurationObject configurationObject) {
this.configurationObject = configurationObject;
}
public String getConfigItem(){
return configurationObject.getConfigItem();
}
}
最诚挚的问候,
Henk
答案 0 :(得分:0)
您可以使用KeyedBroadcastProcessFunction
中的上下文获取Spring类:
ApplicationInitializer
或创建类以使用ApplicationContextAware获取Spring上下文:
ApplicationInitializer.getAppContext().getBean(ConfigurationObject.class);
答案 1 :(得分:0)
是的。这是一个非常有效的用例。当我需要创建一个对象,该对象的某些属性是在运行时确定的时,我经常这样做。
我建议在ConfigurationObject
上创建工厂方法来创建UserObject
:
@Configuration
public class ConfigurationObject {
private final String configItem;
public ConfigurationObject(@Value("${config.item}") final String configItem){
this.configItem = configItem;
}
public String getConfigItem() {
return configItem;
}
public UserObject createUserObject(){
return new UserObject(this);
}
}