我的spring bean有一个带有唯一强制参数的构造函数,我设法用xml配置初始化它:
<bean name="interfaceParameters#ota" class="com.company.core.DefaultInterfaceParameters">
<constructor-arg>
<value>OTA</value>
</constructor-arg>
</bean>
然后我像这样使用这个bean,效果很好。
@Resource(name = "interfaceParameters#ota")
private InterfaceParameters interfaceParameters;
但是我想用annocations指定构造函数arg值,比如
@Resource(name = "interfaceParameters#ota")
@contructorArg("ota") // I know it doesn't exists!
private InterfaceParameters interfaceParameters;
这可能吗?
提前致谢
答案 0 :(得分:63)
首先,您必须在bean定义中指定构造函数arg,而不是在注入点中指定。然后,您可以使用spring的@Value
注释(spring 3.0)
@Component
public class DefaultInterfaceParameters {
@Inject
public DefaultInterfaceParameters(@Value("${some.property}") String value) {
// assign to a field.
}
}
This is also encouraged as Spring advises constructor injection over field injection.
就我看到的问题而言,这可能不适合您,因为您似乎定义了同一个类的多个bean,命名方式不同。为此你不能使用注释,你必须用XML定义它们。
但是我不认为拥有这些不同的bean是个好主意。你最好只使用字符串值。但我无法提供更多信息,因为我不知道你的确切类别。
答案 1 :(得分:2)
正如Bozho所说,你可以设置属性而不是构造函数arg ... @ PostConstruct只会在设置完所有属性后被调用...所以,你仍然可以使用你的字符串......