spring应用手册-IOC(XML配置实现)-(21)-constructor-arg标签

    科技2022-07-13  123

    戴着假发的程序员出品

    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指定类型。

    Processed: 0.012, SQL: 8