Spring 基于Setter的依赖注入

setter的依赖注入

使用setter依赖注入就是通过容器在调用无参数构造函数或无参数static工厂方法来实例化bean 后调用 bean 上的 setter 方法来完成的。

普通数据类型注入

创建一个User普通类。

public class User {
      private String name;
      private  int age;
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

beans.xml依赖注入

<bean name="user" class="com.ch.User">
   <property name="name" value="Tom"/>
   <property name="age" value="55"/>
</bean>

创建测试类,最终输出

User{name=‘Tom’, age=55}

bean注入

创建一个两个类,User类和Address类

User类

public class User {
      private Address name;

    public Address getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "name=" + name +
                '}';
    }
}

Address类

public class Address {
    private  String name;

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Address{" +
                "name='" + name + '\'' +
                '}';
    }
}

beans.xml依赖注入

方案一

<bean name="address" class="com.ch.Address">
    <property name="name" value="游泳"/>
</bean>

<bean name="user" class="com.ch.User">
   <property name="name" ref="address"/>
</bean>

方案二

 <bean name="user" class="com.yc.ch.User">
    <property name="name" >
       <bean name="address" class="com.yc.ch.Address">
           <property name="name" value="游泳"/>
       </bean>
   </property>
</bean>

方案三

再创建一个beans1.xml,里面依赖注入Address的setter

<bean name="address" class="com.yc.ch.Address">
        <property name="name" value="游泳"/>
</bean>

在beans.xml中使用import标签引入

<import resource="beans1.xml" />
<bean name="user" class="com.yc.ch.User">
    <property name="name" ref="address"/>
</bean>

创建测试类,最终输出

User{name=Address{name=‘游泳’}}

数组注入

import java.util.Arrays;

public class User {
      private String[] bokks;

    public String[] getBokks() {
        return bokks;
    }

    public void setBokks(String[] bokks) {
        this.bokks = bokks;
    }

    @Override
    public String toString() {
        return "User{" +
                "bokks=" + Arrays.toString(bokks) +
                '}';
    }
}

beans.xml依赖注入

<bean name="user" class="com.yc.ch.User">
    <property name="bokks">
        <array>
            <value>水浒传</value>
            <value>红楼梦</value>
            <value>西游记</value>
            <value>三国演义</value>
       </array>
    </property>
</bean>

创建测试类,输出

User{bokks=[水浒传, 红楼梦, 西游记, 三国演义]}

集合注入

import java.util.List;
import java.util.Map;
import java.util.Set;

public class User {
    private List<String>  games;
    private Set<String>   hobbys;
    private Map<String,String> card;

    public List<String> getGames() {
        return games;
    }

    public void setGames(List<String> games) {
        this.games = games;
    }

    public Set<String> getHobbys() {
        return hobbys;
    }

    public void setHobbys(Set<String> hobbys) {
        this.hobbys = hobbys;
    }

    public Map<String, String> getCard() {
        return card;
    }

    public void setCard(Map<String, String> card) {
        this.card = card;
    }

    @Override
    public String toString() {
        return "User{" +
                "games=" + games +
                ", hobbys=" + hobbys +
                ", card=" + card +
                '}';
    }
}

beans.xml依赖注入

 <bean name="user" class="com.yc.ch.User">
    <property name="hobbys">
        <set>
           <value>计算机</value>
           <value>赛车</value>
           <value>弹吉他</value>
         </set>
    </property>
    <property name="card">
       <map>
          <entry key="身份证" value="15236542"/>
          <entry key="姓名" value="Tom"/>
          <entry key="性别" value="男"/>
       </map>
    </property>
    <property name="games">
       <list>
          <value>赛车游戏</value>
           <value>唱歌游戏</value>
        </list>
   </property>
</bean>

创建测试类,输出

User{games=[赛车游戏, 唱歌游戏], hobbys=[计算机, 赛车, 弹吉他], card={身份证=15236542, 姓名=Tom, 性别=男}}

null注入

null注入不是不写name的value值

public class User {
    private  String name;

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

错误:

<bean name="user" class="com.yc.ch.User">
       <property name="name" value=""/>
       //创建测试类后,输出的是 User{name=''}
</bean>

正确:

 <bean name="user" class="com.yc.ch.User">
    <property name="name">
        <null/>
        //创建测试类后,输出的是 User{name='null'}
    </property>
</bean>

Properties注入

Properties类主要是读取配置文件的。

import java.util.Properties;

public class User {
    private Properties info;

    public Properties getInfo() {
        return info;
    }

    public void setInfo(Properties info) {
        this.info = info;
    }

    @Override
    public String toString() {
        return "User{" +
                "info=" + info +
                '}';
    }
}

neans.xml依赖注入

<bean name="user" class="com.yc.ch.User">
    <property name="info">
        <props>
            <prop key="id">123456</prop>
            <prop key="姓名">Tom</prop>
            <prop key="性别">男</prop>
        </props>
    </property>
</bean>

创建测试类,输出

User{info={性别=男, 姓名=Tom, id=123456}}

上一篇:sql server和my sql 命令(语句)的区别,sql server与mysql的比较


下一篇:定语和同位语