美文网首页
Spring的依赖注入

Spring的依赖注入

作者: SevenChou | 来源:发表于2018-11-08 18:31 被阅读0次

    spring 的依赖注入

    1.构造函数注入:

    顾名思义,就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置的方式,让 spring 框架来为我们注入。具体代码如下:
    public class AccountServiceImpl implements IAccountService {
        private String name;
        private Integer age;
        private Date birthday;
    
        public AccountServiceImpl(String name, Integer age, Date birthday) {
            this.name = name;
            this.age = age;
            this.birthday = birthday;
        }
    
        @Override
        public void saveAccount() {
            System.out.println(name + "," + age + "," + birthday);
        }
    }
    
    使用构造函数的方式,给 service 中的属性传值
    要求:类中需要提供一个对应参数列表的构造函数。
    涉及的标签:

    constructor-arg属性:

    index:指定参数在构造函数参数列表的索引位置

    type:指定参数在构造函数中的数据类型

    name:指定参数在构造函数中的名称 用这个找给谁赋值

    上面三个都是找给谁赋值,下面两个指的是赋什么值的

    value:它能赋的值是基本数据类型和 String 类型

    ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean

    <bean id="accountService" class="com.xxx.service.impl.AccountServiceImpl">
        <constructor-arg name="name" value="张三"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
        <constructor-arg name="birthday" ref="now"></constructor-arg>
    </bean>
    <bean id="now" class="java.util.Date"></bean>
    

    2.set 方法注入:

    顾名思义,就是在类中提供需要注入成员的 set 方法。具体代码如下:
    public class AccountServiceImpl implements IAccountService {
        private String name;
        private Integer age;
        private Date birthday;
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        @Override
        public void saveAccount() {
            System.out.println(name + "," + age + "," + birthday);
        }
    }
    
    通过配置文件给 bean 中的属性传值:
    使用 set 方法的方式涉及的标签属性:

    name:找的是类中 set 方法后面的部分

    ref:给属性赋值是其他 bean 类型的

    value:给属性赋值是基本数据类型和 string 类型的
    实际开发中,此种方式用的较多。

    <bean id="accountService" class="com.xxx.service.impl.AccountServiceImpl">
        <property name="name" value="test"></property>
        <property name="age" value="21"></property>
        <property name="birthday" ref="now"></property>
    </bean>
    <bean id="now" class="java.util.Date"></bean>
    

    3.注入集合属性

    集合代码如下:
    public class AccountServiceImpl implements IAccountService {
        private String[] myStrs;
        private List<String> myList;
        private Set<String> mySet;
        private Map<String, String> myMap;
        private Properties myProps;
    
        public void setMyStrs(String[] myStrs) {
            this.myStrs = myStrs;
        }
    
        public void setMyList(List<String> myList) {
            this.myList = myList;
        }
    
        public void setMySet(Set<String> mySet) {
            this.mySet = mySet;
        }
    
        public void setMyMap(Map<String, String> myMap) {
            this.myMap = myMap;
        }
    
        public void setMyProps(Properties myProps) {
            this.myProps = myProps;
        }
    
        @Override
        public void saveAccount() {
            System.out.println(Arrays.toString(myStrs));
            System.out.println(myList);
            System.out.println(mySet);
            System.out.println(myMap);
            System.out.println(myProps);
        }
    }
    
    数据注入
          <!--注入集合数据
              List 结构的:
              array,list,set
              Map 结构的
              map,entry,props,prop
           -->
    <bean id="accountService" class="com.xxx.service.impl.AccountServiceImpl">
        <!--在注入集合数据时,只要结构相同,标签可以互换-->
        <!--给数组注入数据-->
        <property name="myStrs">
            <set>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </set>
        </property>
        <!--注入 list 集合数据-->
        <property name="myList">
            <array>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </array>
        </property>
        <!--注入 set 集合数据-->
        <property name="mySet">
            <list>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </list>
        </property>
        <!--注入 Map 数据-->
        <property name="myMap">
            <props>
                <prop key="testA">aaa</prop>
                <prop key="testB">bbb</prop>
            </props>
        </property>
        <!--注入 properties 数据-->
        <property name="myProps">
            <map>
                <entry key="testA" value="aaa"></entry>
                <entry key="testB">
                    <value>bbb</value>
                </entry>
            </map>
        </property>
    </bean>
    

    相关文章

      网友评论

          本文标题:Spring的依赖注入

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