java 只自动设置构造函数的某些参数

6jjcrrmo  于 2023-01-01  发布在  Java
关注(0)|答案(5)|浏览(118)

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

kh212irz

kh212irz1#

你不能用autowired构造函数这样做,因为它会影响所有的参数,但是你可以这样做:

public class MyClass{
    private String name;

    @Autowired
    private MyDAO dao;

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

    // ...
}

这类似于为DAO提供一个setter,但是您没有在类中公开这个公共setter。

nwnhqdif

nwnhqdif2#

如果我没理解错的话,您是在问是否可以连接到在上下文中其他地方定义的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>
nkkqxpd9

nkkqxpd93#

看来你应该把@Autowired加到MyDao道上;声明,然后将构造函数更改为只接受名称参数。您将自动能够访问MyDao

guicsvcw

guicsvcw4#

您可以使用Java Config完成此操作。

@Bean
public MyClass myClass(MyDao dao) {
  return new MyClass("tst", dao);
}
cpjpxq1n

cpjpxq1n5#

    • 这是可能的**

参考此链接:
static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation-qualifiers

相关问题