9

在 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

4 回答 4

6

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

public class MyClass{
    private String name;

    @Autowired
    private MyDAO dao;

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

    // ...
}

它类似于为 DAO 设置一个设置器,但您不会在您的课程中公开该公共设置器。

于 2012-07-05T14:24:32.723 回答
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>
于 2012-07-05T14:23:08.613 回答
0

似乎您应该将 @Autowired 添加到 MyDao dao;声明,然后将您的构造函数更改为仅使用名称参数。您将自动能够访问 MyDao

于 2012-07-05T14:23:21.617 回答
0

有可能的。

参考这个链接:

static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation-qualifiers

于 2012-07-05T14:28:58.610 回答