Spring框架的依赖注入方式

一,构造注入

1,简介

        构造注入是指,在构造调用者实例的同时,完成被调用者的实例化。即使用构造器设置依赖关系。

2,特点

        通过构造方法实现

        灵活性差,仅靠重载限制太多

        时效性好

        通过匹配的构造方法实例化,但建议保留无参构造

3,注意事项

1、一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。

2、通过<constructor-arg>元素的index 属性可以指定该参数的位置索引,位置从0 开始。

3、<constructor-arg>元素还提供了type 属性用来指定参数的类型,避免字符串和基本数据类型的混淆。

4,代码演示

        输入参数内容

<bean class="com.spring1.aop.dao.impl.UserDaoImpl" id="userDao"></bean>
    <bean class="com.spring1.aop.service.impl.UserServiceImpl" id="userService">
        <!--构造器注入ref输入参数内容-->
        <constructor-arg ref="userDao"></constructor-arg>
</bean>

         输入参数序号

<bean class="com.spring1.aop.dao.impl.UserDaoImpl" id="userDao"></bean>
<bean class="com.spring1.aop.service.impl.UserServiceImpl" id="userService">
    <constructor-arg index="0" value="第一个参数"></constructor-arg>
        <constructor-arg index="1" value="第二个参数"></constructor-arg>
</bean>

二,设值注入

1,简介

        就是IoC容器使用成员变量的setter方法来注入被依赖对象,这种方式比较简单和直观。

2,特点

        通过setter访问器实现

        灵活性好,但setter方法数量较多

        时效性差

        通过无参构造实例化

3,代码演示

        利用上一个文章的打印机案例代码演示

    <!--墨盒组件-->
    <bean id="blackAndWhite" class="com.spring1.ioc.demo2.ink.impl.BlackAndWhite"></bean>
    <bean class="com.spring1.ioc.demo2.ink.impl.Color" id="color"></bean>
    <!--纸张组件-->
    <bean class="com.spring1.ioc.demo2.paper.impl.A4" id="a4"></bean>
    <bean class="com.spring1.ioc.demo2.paper.impl.B5" id="b5"></bean>
    <!--打印机组件-->
    <bean class="com.spring1.ioc.demo2.Print" id="print">
        <property name="paper" ref="a4"></property>
        <property name="ink" ref="blackAndWhite"></property>
    </bean>

三,使用p命名空间注入属性值

1,使用前需引入p命名空间

xmlns:p="http://www.springframework.org/schema/p"

2,特点 

        使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码

3,代码演示

public class User {
    private String name;
    private String pass;
    private String age;
    private String address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

         使用p命名空间注入

<!--p命名注入,需要set方法支持-->
    <bean class="com.spring1.aop.bean.User" p:name="张三" p:age="18" p:address="西安市" p:pass="123456" ></bean>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值