如何使用注释将值注入bean构造函数

时间:2010-11-17 10:05:04

标签: spring annotations

我的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;

这可能吗?

提前致谢

2 个答案:

答案 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只会在设置完所有属性后被调用...所以,你仍然可以使用你的字符串......