仅自动装配构造函数的某些参数

时间:2012-07-05 14:16:39

标签: java spring inversion-of-control

Spring中是否可以仅自动装配构造函数的特定参数?

我定义了:

<bean class="MyClass">
    <constructor-arg name="name" value="object name" />
</bean>

使用:

public class MyClass{
    private String name;
    private MyDAO dao;

    @Autowired
    public MyClass(String name, MyDao dao){
        // assign...
    }

    // ...
}

现在我想要MyDao对象自动装配,同时明确定义name参数。 有可能吗?

使用XML定义bean需要手动定义所有参数吗?

4 个答案:

答案 0 :(得分:5)

您不能使用自动装配的构造函数,因为它会影响所有参数,但您可以这样做:

public class MyClass{
    private String name;

    @Autowired
    private MyDAO dao;

    public MyClass(String name){
        // assign only name
    }

    // ...
}

它类似于为DAO设置一个setter,但是你没有在你的类中公开它的公共setter。

答案 1 :(得分:2)

如果我正确地阅读了您的问题,您就会问是否可以连接您在上下文中已定义的MyDao实例,并为name参数提供硬编码的字符串值。如果这是正确的,您可以将您的类配置为

<bean class="MyClass">
  <constructor-arg value="Hardcoded string value for the name" />
  <constructor-arg ref="myDaoInstance" />
</bean>

您的上下文文件中的其他位置

<bean class="MyDao" id="myDaoInstance>
  //relevant config
</bean>

答案 2 :(得分:0)

好像你应该将@Autowired添加到MyDao dao;声明,然后更改您的构造函数以获取名称参数。您将自动访问MyDao

答案 3 :(得分:0)