1.21 constructor-arg标签

戴着假发的程序员出品

[查看视频教程]

constructor-arg标签和property一样可以通知spring帮我们注入属性。

只不过constructor-arg的配置,spring会通过构造方法注入,这时就需要我们的类中有对应的构造方法。

案例如下:

 1 /**
 2  * @author 戴着假发的程序员
 3  * @description
 4  */
 5 public class AccountService {
 6     private IAccountDAO accountDAO;//bean的引用类型
 7     private String appName;//简单类型(String和基本数据类型)
 8 
 9     public AccountService(IAccountDAO accountDAO, String appName) {
10         this.accountDAO = accountDAO;
11         this.appName = appName;
12     }
13 
14     public int save(String name){
15         System.out.println("AppName:"+appName);
16         System.out.println("AccountService-save->保存用户:"+name);
17         return accountDAO.save(name);
18     }
19 }

这时我们会发现,我们的类不再需要提供无参数的构造方法了。

配置方式如下:

我们可以根据构造方法形参的名字注入:

1     <!-- 注册accountDAO_oracle -->
2     <bean id="accountDAO_oracle"  class="com.dk.demo1.dao.impl.AccountDAO_oracle"/>
3     <!-- 注册accountService  注入accountDAO_mysql -->
4     <bean id="accountService" name="a_service"
5           class="com.dk.demo1.service.AccountService">
6         <!-- 使用构造方法注入属性 -->
7         <constructor-arg name="accountDAO" ref="accountDAO_oracle"/>
8         <constructor-arg name="appName" value="spring应用手册"/>
9     </bean>

我们也可以根据参数的索引注入属性:

1     <!-- 注册accountDAO_oracle -->
2     <bean id="accountDAO_oracle"  class="com.dk.demo1.dao.impl.AccountDAO_oracle"/>
3     <!-- 注册accountService  注入accountDAO_mysql -->
4     <bean id="accountService" name="a_service"
5           class="com.dk.demo1.service.AccountService">
6         <!-- 使用构造方法注入属性 -->
7         <constructor-arg index="0" ref="accountDAO_oracle"/>
8         <constructor-arg index="1" value="spring应用手册"/>
9     </bean>

当然 constructor-arg还有一个属性type用来指定参数的类型:

 1     <!-- 注册accountDAO_oracle -->
 2     <bean id="accountDAO_oracle"  class="com.dk.demo1.dao.impl.AccountDAO_oracle"/>
 3     <!-- 注册accountService  注入accountDAO_mysql -->
 4     <bean id="accountService" name="a_service"
 5           class="com.dk.demo1.service.AccountService">
 6         <!-- 使用构造方法注入属性 -->
 7         <constructor-arg type="com.dk.demo1.dao.IAccountDAO"
 8                          index="0" ref="accountDAO_oracle"/>
 9         <constructor-arg index="1" value="spring应用手册"/>
10     </bean>

通常情况下,spring都会自动识别类型,但是如果一个bean本身拥有多个类型,这时如果我们需要指定特定的类型,就需要使用type指定类型。

posted @ 2020-10-05 09:30  戴着假发的程序员0-1  阅读(648)  评论(0编辑  收藏  举报