依赖注入的方法

依赖注入的方法

通过构造器注入

官方文档:

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"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值