Spring-属性注入

构造方法的方式

  • 首先新建一个 User
  • 这个类当中有一个构造器,两个参数的,就是待会用它来进行注入
/**
 * @author: BNTang
 **/
public class User {
    private String name;
    private Integer age;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  • 然后修改 applicationContext.xml
...

<bean id="user" class="top.it6666.domain.User">
    <constructor-arg name="name" value="BNTang"/>
    <constructor-arg name="age" value="18"/>
</bean>

...
  • 测试类代码如下:
/**
 * @author: BNTang
 **/
public class UserDaoTest {
    @Test
    public void save() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        User User = (User) applicationContext.getBean("user");

        System.out.println(User);
    }
}
  • 输出结果如下:
User{name='BNTang', age=18}

Set方法的方式

  • 修改 User
  • 修改内容如下:
/**
 * @author: BNTang
 **/
public class User {
    private String name;
    private Integer age;

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

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

    ...
}
  • 然后修改 applicationContext.xml
  • 修改内容如下:
...

<bean id="user" class="top.it6666.domain.User">
    <property name="name" value="BNTang"/>
    <property name="age" value="23"/>
</bean>

...
  • 测试类代码和上面的一样没变过,输出结果也是:

Set方法的方式设置对象类型的属性

  • 新建一个 Dog 类代码如下:
/**
 * @author: BNTang
 **/
public class Dog {

    private String name;

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

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                '}';
    }
}
  • 修改 User 类代码如下:
/**
 * @author: BNTang
 **/
public class User {
    private String name;
    private Integer age;
    private Dog dog;

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", dog=" + dog +
                '}';
    }
}
  • 然后修改 applicationContext.xml
  • 修改内容如下,如果想要使用 Set 方法的方式设置对象类型的属性,首先被设置的对象需要交给 Spring 进行管理:

...

<bean id="dog" class="top.it6666.domain.Dog">
    <property name="name" value="wc"/>
</bean>
<bean id="user" class="top.it6666.domain.User">
    <property name="dog" ref="dog"/>
</bean>

...
  • 测试类代码还是不动,自行运行看结果即可:

P名称空间的方式

  • 使用 P名称空间,就不需要写那么多的 property 标签了
  • 使用P名称空间时,需要添加 名称空间,P名称空间内容如下:
  • 也就是修改 applicationContext.xml
xmlns:p="http://www.springframework.org/schema/p"

  • 接下来我们使用 P名称空间 的方式来改写我们之前的方式
  • 改写完之后的内容如下,测试类的代码还是同上结果也是:
...

<bean id="dog" class="top.it6666.domain.Dog" p:name="wc"/>
<bean id="user" class="top.it6666.domain.User" p:dog-ref="dog"/>

...

SpEL表达式的方式

  • 修改 applicationContext.xml
  • 修改之后的内容如下:
...

<bean id="dog" class="top.it6666.domain.Dog">
    <property name="name" value="#{'旺财'}"/>
</bean>
<bean id="user" class="top.it6666.domain.User">
    <property name="dog" value="#{dog}"/>
</bean>

...
  • 测试类代码和输出结果同上:

集合类型的属性注入

数组

  • 修改 User 类代码如下:
/**
 * @author: BNTang
 **/
public class User {
    private String attr[];

    public void setAttr(String[] attr) {
        this.attr = attr;
    }

    @Override
    public String toString() {
        return "User{" +
                "attr=" + Arrays.toString(attr) +
                '}';
    }
}
  • 修改 applicationContext.xml
  • 修改之后的内容如下:
...

<bean id="user" class="top.it6666.domain.User">
    <property name="attr">
        <list>
            <value>zs</value>
            <value>ls</value>
            <value>ww</value>
        </list>
    </property>
</bean>

...
  • 测试类代码同上:

List集合

  • 修改 User 类代码如下:
/**
 * @author: BNTang
 **/
public class User {
    private List myList;

    public void setMyList(List myList) {
        this.myList = myList;
    }

    @Override
    public String toString() {
        return "User{" +
                "myList=" + myList +
                '}';
    }
}
  • 修改 applicationContext.xml
  • 修改之后的内容如下:
...

<bean id="user" class="top.it6666.domain.User">
    <property name="myList">
        <list>
            <value>zs</value>
            <value>ls</value>
            <value>ww</value>
        </list>
    </property>
</bean>

...
  • 测试类代码同上:

Set集合

  • 修改 User 类代码如下:
/**
 * @author: BNTang
 **/
public class User {
    private Set mySet;

    public void setMySet(Set mySet) {
        this.mySet = mySet;
    }

    @Override
    public String toString() {
        return "User{" +
                "mySet=" + mySet +
                '}';
    }
}
  • 修改 applicationContext.xml
  • 修改之后的内容如下:
...

<bean id="user" class="top.it6666.domain.User">
    <property name="mySet">
        <set>
            <value>zs</value>
            <value>ls</value>
            <value>ww</value>
        </set>
    </property>
</bean>

...
  • 测试类代码同上:

Map集合

  • 修改 User 类代码如下:
/**
 * @author: BNTang
 **/
public class User {
    private Map myMap;

    public void setMyMap(Map myMap) {
        this.myMap = myMap;
    }

    @Override
    public String toString() {
        return "User{" +
                "myMap=" + myMap +
                '}';
    }
}
  • 修改 applicationContext.xml
  • 修改之后的内容如下:
...

<bean id="user" class="top.it6666.domain.User">
    <property name="myMap">
        <map>
            <entry key="key1" value="value1"/>
            <entry key="key2" value="value2"/>
            <entry key="key3" value="value3"/>
        </map>
    </property>
</bean>

...
  • 测试类代码同上
  • 都开始学 Spring 了关于集合一些的基本使用我就不一一说明了
posted @ 2020-10-03 19:19  BNTang  阅读(101)  评论(0编辑  收藏  举报