2012-07-05 37 views
5

在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需要手动定义所有参数?

回答

3

你不能这样做,与自动装配Autowired构造,因为它会影响所有参数,但你可以这样做:

public class MyClass{ 
    private String name; 

    @Autowired 
    private MyDAO dao; 

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

    // ... 
} 

它类似于具有用于DAO二传手但是你不会在你的课堂上暴露这个公开制定者。

+0

好的,所以我必须改变我的构造器......或者在我的XML定义中使用显式引用...... – davioooh 2012-07-05 14:49:41

+0

是的,这取决于项目的其余部分,如果它对大多数bean引用使用自动装配,或者在XML中进行明确的定义,以保持一致性。 – Luciano 2012-07-05 14:51:34

+0

非常感谢。 – davioooh 2012-07-05 14:53:45

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> 
+0

这是一个很好的建议,谢谢! +1 – davioooh 2012-07-05 15:04:31

0

好像你应该添加@Autowired到MyDao DAO类;声明,然后将您的构造函数改为名称参数。您将自动能够访问MyDao