美文网首页
依赖注入的方式

依赖注入的方式

作者: 极客_Ls | 来源:发表于2019-02-15 16:04 被阅读0次
    依赖注入:

    依赖于某些方式给Bean的资源进行注入

    Spring 支持三种依赖注入的方式
    1. 属性注入
    2. 构造器注入
    3. 工厂方法注入少用、不推荐

    一. 属性注入:

    • 使用setter方法
    laishuai.setAge(12);
    
    • 通过IOC的配置文件
    <property name="name" value="LaiShuai"></property>
    //或者通过
    <property name="name">
        < value>value值</value>
    </property>
    

    二. 构造器注入:
    在xml中:默认为构造器属性顺序进行注入,也可以用index对属性进行顺序标注,type指定数据类型

     //需要根据构造方法的属性顺序依次赋值
     <bean id="persion" class="com.laishuai.bean.Persion">
          <constructor-arg value="二狗子" ></constructor-arg>
          <constructor-arg value="22"></constructor-arg>
     </bean>
    
    //也可以使用index指定属性的顺序,index从0开始
     <bean id="persion" class="com.laishuai.bean.Persion" >
          <constructor-arg value="二狗子" index=0></constructor-arg>
          <constructor-arg value="22"></constructor-arg>
     </bean>
    
    //使用时间序列标志
     <bean id="persion" class="com.laishuai.bean.Persion">
          <constructor-arg value="二狗子" type=“java.lang.String”></constructor-arg>
          <constructor-arg value="22" type=int“”></constructor-arg>
     </bean>
    
    字面值:
    • 可以用字符串表示的值,可以通过<value>元素标签或 value1属性进行注入
    • 基本数据类型及其封装类、String等类型都可以使用字面值注入的方式
    • 若字面值包含特殊字符,可以使<![ADATA]>把字面值包裹起来。
    //只能使用value标签进行赋值,不能使用value属性
    <bean id="persion" class="com.laishuai.bean.Persion">
            <property name="name">
                <value>陈二狗<![CDATA[?]]></value>
            </property>
            <property name="age">
                <value>22</value>
            </property>
        </bean>
    
    引用Bean

    省略getter()、setter()方法

    package com.laishuai.bean;
    
    public class Persion {
        public String name;
        public int age;
        public Car car;
    
        @Override
        public String toString() {
            return "Persion{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", car=" + car +
                    '}';
        }
    }
    
    
    package com.laishuai.bean;
    
    public class Car {
    
        private String name;
        private double lenght;
        private double width;
    
        public Car(String name, double lenght, double width) {
            this.name = name;
            this.lenght = lenght;
            this.width = width;
        }
    
        @Override
        public String toString() {
            return "Car{" +
                    "name='" + name + '\'' +
                    ", lenght=" + lenght +
                    ", width=" + width +
                    '}';
        }
    }
    
    
    
    <bean id="car0" class="com.laishuai.bean.Car">
            <constructor-arg value="宝马"></constructor-arg>
            <constructor-arg value="4"></constructor-arg>
            <constructor-arg value="4"></constructor-arg>
    </bean>
    
    <bean id="persion3" class="com.laishuai.bean.Persion">
            <property name="name" value="二狗子"></property>
            <property name="age" value="22"></property>
            <property name="car">
                <ref bean="car0"></ref>
            </property>
    </bean>
    
    内部Bean

    此处 car0 被称为内部Bean

    <bean id="persion3" class="com.laishuai.bean.Persion">
            <property name="name" value="二狗子"></property>
            <property name="age" value="22"></property>
            <property name="car">
                <!--<ref bean="car0"></ref>-->
                <bean id="car0" class="com.laishuai.bean.Car">
                    <constructor-arg value="宝马X6"></constructor-arg>
                    <constructor-arg value="4"></constructor-arg>
                    <constructor-arg value="4"></constructor-arg>
                </bean>
            </property>
        </bean>
    

    可以使用<null> 给Bean的字符串或其他对象类型的属性注入 null 值

    相关文章

      网友评论

          本文标题:依赖注入的方式

          本文链接:https://www.haomeiwen.com/subject/lcppeqtx.html