戴着假发的程序员出品
constructor-arg标签
spring应用手册(第一部分)
constructor-arg标签和property一样可以通知spring帮我们注入属性。
只不过constructor-arg的配置,spring会通过构造方法注入,这时就需要我们的类中有对应的构造方法。
案例如下:
/**
* @author 戴着假发的程序员
* @description
*/
public class AccountService {
private IAccountDAO accountDAO;//bean的引用类型
private String appName;//简单类型(String和基本数据类型)
public AccountService(IAccountDAO accountDAO, String appName) {
this.accountDAO = accountDAO;
this.appName = appName;
}
public int save(String name){
System.out.println("AppName:"+appName);
System.out.println("AccountService-save->保存用户:"+name);
return accountDAO.save(name);
}
}
这时我们会发现,我们的类不再需要提供无参数的构造方法了。
配置方式如下:
我们可以根据构造方法形参的名字注入:
<!-- 注册accountDAO_oracle -->
<bean id="accountDAO_oracle" class="com.dk.demo1.dao.impl.AccountDAO_oracle"/>
<!-- 注册accountService 注入accountDAO_mysql -->
<bean id="accountService" name="a_service"
class="com.dk.demo1.service.AccountService">
<!-- 使用构造方法注入属性 -->
<constructor-arg name="accountDAO" ref="accountDAO_oracle"/>
<constructor-arg name="appName" value="spring应用手册"/>
</bean>
我们也可以根据参数的索引注入属性:
<!-- 注册accountDAO_oracle -->
<bean id="accountDAO_oracle" class="com.dk.demo1.dao.impl.AccountDAO_oracle"/>
<!-- 注册accountService 注入accountDAO_mysql -->
<bean id="accountService" name="a_service"
class="com.dk.demo1.service.AccountService">
<!-- 使用构造方法注入属性 -->
<constructor-arg index="0" ref="accountDAO_oracle"/>
<constructor-arg index="1" value="spring应用手册"/>
</bean>
当然 constructor-arg还有一个属性type用来指定参数的类型:
<!-- 注册accountDAO_oracle -->
<bean id="accountDAO_oracle" class="com.dk.demo1.dao.impl.AccountDAO_oracle"/>
<!-- 注册accountService 注入accountDAO_mysql -->
<bean id="accountService" name="a_service"
class="com.dk.demo1.service.AccountService">
<!-- 使用构造方法注入属性 -->
<constructor-arg type="com.dk.demo1.dao.IAccountDAO"
index="0" ref="accountDAO_oracle"/>
<constructor-arg index="1" value="spring应用手册"/>
</bean>
通常情况下,spring都会自动识别类型,但是如果一个bean本身拥有多个类型,这时如果我们需要指定特定的类型,就需要使用type指定类型。