依賴注入的方法

依賴注入的方法

通過構造器注入

官方文檔:

Core Technologies

通過有參構造器注入。

使用:

假設有一個人,有一條狗和一隻貓,狗有名字和年齡。

    package com.lbl.pojo;
    
    public class User {
        private Cat cat;
        private Dog dog;
    
        public User(Cat cat, Dog dog) {
            this.cat = cat;
            this.dog = dog;
        }
    }
    package com.lbl.pojo;
    
    public class Cat {
    }
    package com.lbl.pojo;
    
    public class Dog {
        private String name;
        private int age;
    
        public Dog(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }

在配置文件中通過構造器注入:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="User" class="com.lbl.pojo.User">
            <constructor-arg  index="1" ref="dog"/>
            <constructor-arg  index="0" ref="cat"/>
        </bean>
        <bean id="dog" class="com.lbl.pojo.Dog">
            <constructor-arg type="int" value="12"/>
            <constructor-arg type="java.lang.String" value="wangcai"/>
        </bean>
        <bean id="cat" class="com.lbl.pojo.Cat"/>
    </beans>

User的注入:通過index來匹配,也可以不加

Dog的注入:通過類型來匹配,必須寫全限定名

通過Set方法注入

官方文檔:

Core Technologies

假設我們有一個人,有一大堆基本屬性和一個地址類屬性:

    package com.lbl.pojo;
    
    import java.util.*;
    
    public class User {
        private String name;
        private Address address;
        private List<String> userlist;
        private Map<String, String> usermap;
        private Set<String> userset;
        private String[] userString;
        private Properties info;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Address getAddress() {
            return address;
        }
    
        public void setAddress(Address address) {
            this.address = address;
        }
    
        public List<String> getUserlist() {
            return userlist;
        }
    
        public void setUserlist(List<String> userlist) {
            this.userlist = userlist;
        }
    
        public Map<String, String> getUsermap() {
            return usermap;
        }
    
        public void setUsermap(Map<String, String> usermap) {
            this.usermap = usermap;
        }
    
        public Set<String> getUserset() {
            return userset;
        }
    
        public void setUserset(Set<String> userset) {
            this.userset = userset;
        }
    
        public String[] getUserString() {
            return userString;
        }
    
        public void setUserString(String[] userString) {
            this.userString = userString;
        }
    
        public Properties getInfo() {
            return info;
        }
    
        public void setInfo(Properties info) {
            this.info = info;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", address=" + address.toString() +
                    ", userlist=" + userlist +
                    ", usermap=" + usermap +
                    ", userset=" + userset +
                    ", userString=" + Arrays.toString(userString) +
                    ", info=" + info +
                    '}';
        }
    }

地址類:

    package com.lbl.pojo;
    
    public class Address {
        private String add;
        private Integer num;
    
        public String getAdd() {
            return add;
        }
    
        public void setAdd(String add) {
            this.add = add;
        }
    
        public Integer getNum() {
            return num;
        }
    
        public void setNum(Integer num) {
            this.num = num;
        }
    
        @Override
        public String toString() {
            return "Address{" +
                    "add='" + add + '\'' +
                    ", num=" + num +
                    '}';
        }
    }

在配置文件中使用Set方法注入,包含各種集合類的注入方式:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    
    
        <bean id="address" class="com.lbl.pojo.Address">
            <property name="add" value="AK47"></property>
            <property name="num" value="12312321"></property>
        </bean>
        <bean id="user" class="com.lbl.pojo.User">
            <property name="address" ref="address"/>
            <property name="name" value="asdsd"/>
            <property name="userlist">
                <list>
                    <value>asdasdf</value>
                    <value>sarasd</value>
                </list>
            </property>
            <property name="usermap">
                <map>
                    <entry key="key1" value="v1"/>
                    <entry key="key2" value="v2"/>
                </map>
            </property>
            <property name="userString" value="KSDS"/>
            <property name="userset">
                <set>
                    <value>sasdasd</value>
                    <value>sdasdas</value>
                </set>
            </property>
            <property name="info">
                <props>
                    <prop key="username">sda</prop>
                    <prop key="password">123214</prop>
                </props>
            </property>
        </bean>
    </beans>

C命名空間和P命名空間注入

C-namespace:就是構造器注入constructor-arg的縮寫。

P-namespace:就是屬性注入property的縮寫。

P-namespace:

注意要事先引入依賴:

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

    <bean id="address" class="com.lbl.pojo.Address">
        <property name="add" value="AK47"></property>
        <property name="num" value="12312321"></property>
    </bean>

變爲:

    <bean id="address" class="com.lbl.pojo.Address" p:add="AK47" p:num="1234"/>

C-namespace:

注意要事先引入依賴:

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

    <bean id="dog" class="com.lbl.pojo.Dog">
        <constructor-arg type="int" value="12"/>
        <constructor-arg type="java.lang.String" value="wangcai"/>
    </bean>

變爲:

    <bean id="dog" class="com.lbl.pojo.Dog" c:name="wangcai" c:age="12"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章