1.21 constructor-arg标签
戴着假发的程序员出品
[查看视频教程]
constructor-arg标签和property一样可以通知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指定类型。
我是戴着假发的程序员,分享技术,分享经验,如果要转载,请注明:出自戴着假发的程序员