当前位置: 首页 > 图灵资讯 > 技术篇> set注入专题2和p命名空间注入

set注入专题2和p命名空间注入

来源:图灵教育
时间:2023-06-02 09:26:05

set注入专题1接代码写在course5中.set注入专题级联属性赋值25

要点:

●在spring配置文件中,如上,注意顺序。

●clazz属性必须在spring配置文件中提供getter方法

com.powernode.spring6.bean

Clazz

package com.powernode.spring6.bean;/** * set注入专题级联属性赋值  25 * 表示班级 **/public class Clazz {    // 班级名称    private String name;    public void setName(String name) {        this.name = name;    }    @Override    public String () {        return "Clazz{" +                "name='" + name + '\'' +                '}';    }}

Student

package com.powernode.spring6.bean;/** * set注入专题级联属性赋值  25 * 表示学生 **/public class Student {    private String name;    // 学生属于哪个班?    private Clazz clazz;    public void setClazz(Clazz clazz) {        this.clazz = clazz;    }    // 使用级联属性赋值,这需要这种get方法。    public Clazz getClazz() {        return clazz;    }    public void setName(String name) {        this.name = name;    }    @Override    public String () {        return "Student{" +                "name='" + name + '\'' +                ", clazz=" + clazz +                '}';    }}

<!--使用级联属性赋值需要注意两点:  25            1. 配置顺序不能颠倒,必须按以下顺序进行。            2. 必须提供clazz属性的getter方法。    -->    <bean id="studentBean" class="com.powernode.spring6.bean.Student">        <!--使用value简单类型-->        <property name="name" value="张三"/>        <!--这不是一个简单的类型,使用ref-->        <property name="clazz" ref="clazzBean"/>        <!--级联属性赋值  25-->        <property name="clazz.name" value=“高三二班”/>    </bean>    <bean id="clazzBean" class="com.powernode.spring6.bean.Clazz"></bean>    <!--<bean id="clazzBean" class="com.powernode.spring6.bean.Clazz">        <property name="name" value=“高三一班”/>    </bean>-->

///set注入专题级联属性赋值  25    @Test    public void testCascade(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("cascade.xml");        Student studentBean = applicationContext.getBean("studentBean", Student.class);        System.out.println(studentBean);        Clazz clazzBean = applicationContext.getBean("clazzBean", Clazz.class);        System.out.println(clazzBean);    }

set注入专题2和p命名空间注入_List

2.set注入专题注入数组26

要点:

●若数组类型简单,则使用value标签。

●若数组中是非简单类型,则使用ref标签。

com.powernode.spring6.bean

Woman

package com.powernode.spring6.bean;/** * set注入专题注入数组  26 **/public class Woman {    private String name;    public void setName(String name) {        this.name = name;    }    @Override    public String () {        return "Woman{" +                "name='" + name + '\'' +                '}';    }}

QianDaYe

package com.powernode.spring6.bean;import java.util.Arrays;/** *  set注入专题注入数组  26 **/public class QianDaYe {    //String 是简单类型  26    private String[] aiHaos;    public void setAiHaos(String[] aiHaos) {        this.aiHaos = aiHaos;    }    // 多个女性朋友 这不是一个简单的类型  26    private Woman[] womens;    public void setWomens(Woman[] womens) {        this.womens = womens;    }    @Override    public String () {        return "QianDaYe{" +                "aiHaos=" + Arrays.(aiHaos) +                ", womens=" + Arrays.(womens) +                '}';    }}

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd"><!--    set注入专题注入数组  26-->    <bean id="w1" class="com.powernode.spring6.bean.Woman">        <property name="name" value="小花"/>    </bean>    <bean id="w2" class="com.powernode.spring6.bean.Woman">        <property name="name" value="小亮"/>    </bean>    <bean id="w3" class="com.powernode.spring6.bean.Woman">        <property name="name" value="小明"/>    </bean>    <bean id="yuQian" class="com.powernode.spring6.bean.QianDaYe">        <!-- 这个数组属性中的元素类型是String的简单类型 26-->        <property name="aiHaos">            <array>                <value>抽烟</value>                <value>喝酒</value>                <value>烫头</value>            </array>        </property>        <!-- 这个数组中的类型不是简单的类型-->        <property name="womens">            <array>                <ref bean="w1"/>                <ref bean="w2"/>                <ref bean="w3"/>            </array>        </property>    </bean></beans>

/set注入专题注入数组  26    @Test    public void testArray(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-array.xml");        QianDaYe yuQian = applicationContext.getBean("yuQian", QianDaYe.class);        System.out.println(yuQian);    }

set注入专题2和p命名空间注入_set注入_02

3.List和Set集合27set注入专题

List集合:有序可重复

注:注入List集合时使用List标签,如果List集合是简单类型使用value标签,则使用ref标签。

Set集合:无序不能重复

要点:

●使用标签

●set集中元素是使用value标签的简单类型,相反,使用ref标签

在这里,代码和第四点一起写

4.Map和Properties28set注入专题

Map要点:

●使用标签

●若key类型简单,则使用key属性,则使用key-ref属性。

●假如value是一种简单的类型,使用value属性,反之,使用value-ref属性。

Properties要点:

java.util.Properties继承java.util.Hashtable,所以Properties也是Map集合。

●使用标签嵌套标签完成。

package com.powernode.spring6.bean;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.Set;/** * List和Set集合注入set专题   27 **/public class Person {    // 注入List集合    private List names;    // 注入Set集合    private Set addrs;    // 注入Map集合   28    // 多个电话    private Map phones;    // 注入属性类对象  28    // 本质上,Properties也是Map集合。    // Properties的父类Hashtable,Hashtable实现了Map接口。    // Properties的父类Hashtable,Hashtable实现了Map接口。    // 虽然这也是一个Map集合,但它有点像Map的注入方式,但不同。    // Propertieskey和value只能是String类型。    private Properties properties;    public void setProperties(Properties properties) {        this.properties = properties;    }    public void setPhones(Map phones) {        this.phones = phones;    }    public void setNames(List names) {        this.names = names;    }    public void setAddrs(Set addrs) {        this.addrs = addrs;    }    @Override    public String toString() {        return "Person{" +                "names=" + names +                ", addrs=" + addrs +                ", phones=" + phones +                ", properties=" + properties +                '}';    }}

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd"><!--    List和Set集合注入set专题   27-->    <bean id="personBean" class="com.powernode.spring6.bean.Person">                <property name="properties">            <!--注入Properties属性对象-->            <props>                <prop key="driver">com.mysql.cj.jdbc.Driver</prop>                <prop key="url">jdbc:mysql://localhost:3306/spring6</prop>                <prop key="username">root</prop>                <prop key="password">123456</prop>            </props>        </property>        <property name="phones">            <!--注入Map集合   28-->            <map>                <!--注入Map集合   28-->            <map>                <!--如果key和value不是简单的类型,请使用此配置。-->                <!--<entry key-ref="" value-ref=""/>-->                <!--如果是简单的类型,key和value-->                <entry key="1" value="110"/>                <entry key="2" value="120"/>                <entry key="3" value="119"/>            </map>        </property>        <property name="names">            <!--list集合有序可重复-->            <list>                <value>张三</value>                <value>李四</value>                <value>王五</value>                <value>张三</value>                <value>张三</value>                <value>张三</value>                <value>张三</value>            </list>        </property>        <property name="addrs">            <!--set集合无序不能重复-->            <set>                <value>北京大兴区</value>                <value>北京大兴区</value>                <value>北京海淀区</value>                <value>北京海淀区</value>                <value>北京大兴区</value>            </set>        </property>    </bean></beans>

///set注入专题List和set集合   27    //set注入专题Map和Propertiese   28    @Test    public void testCollection(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-collection.xml");        Person personBean = applicationContext.getBean("personBean", Person.class);        System.out.println(personBean);    }

set注入专题2和p命名空间注入_xml_03

5.注入nulll和空字符串295.1注入set专题

使用注入空字符串,或value=“”

●让我们来看看如何注入空字符串。

        <!--第一种方法是注入空字符串--><!--        <property name="name" value=""/>-->        <!--第二种方法是注入空字符串-->        <property name="name">            <value/>        </property>

5.2如何注入null?29

注入null使用:或者不赋值该属性

第一种方法:默认注入nullll而不给属性赋值

        <!--不注入属性,属性的默认值为null-->        <!--<property name="name" value="tom"></property>-->        <property name="age" value="20"/>        <!-- 这不是注入null,而是注入一个“”null"字符串--><!--        <property name="name" value="null"/>-->

第二种方式:使用

        <!--这种方法是手动注入nullll-->        <property name="name">            <null/>        </property>

com.powernode.spring6.bean

Cat

package com.powernode.spring6.bean;/** * @author 动力节点 * @version 1.0 * @className Cat * @since 1.0 **/public class Cat {    private String name;    private int age;    public void setName(String name) {        this.name = name;    }    public String getName() {        return name;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "Cat{" +                "name='" + name + '\'' +                ", age=" + age +                '}';    }}

set-di.xml

///set注入null和空字符串  29    @Test    public void testNull(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("set-di.xml");        Cat catBean = applicationContext.getBean("catBean", Cat.class);        //System.out.println(catBean);        System.out.println(catBean.getName().toUpperCase());    }

6.set注入特殊字符30

com.powernode.spring6.bean

MathBean

package com.powernode.spring6.bean;/** *  特殊字符注入set注入专题  30 **/public class MathBean {    private String result;    public void setResult(String result) {        this.result = result;    }    @Override    public String toString() {        return "MathBean{" +                "result='" + result + '\'' +                '}';    }}

XML有五个特殊字符,分别是:<、>、'、"、&

XML将特别对待上述五个特殊符号,并将其作为XML语法的一部分进行分析。如果这些特殊符号直接出现在注入的字符串中,则会报告错误。

set注入专题2和p命名空间注入_List_04

6.1第一种:转义字符代替特殊符号。30

对应五个特殊字符的转义字符是:

特殊字符

转义字符

>

>

<

<

'

'

"

"

&

&

<!--        第一种方案:用实体符号代替特殊符号-->        <property name="result" value="2 < 3" />

///set注入特殊字符  30    @Test    public void testSpecial(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("set-di.xml");        MathBean mathBean = applicationContext.getBean("mathBean", MathBean.class);        System.out.println(mathBean);    }

set注入专题2和p命名空间注入_spring_05

6.2第二种:30

将含有特殊符号的字符串放入:其中。XML文件解析器不会分析CDATA区域中的数据。

注:使用CDATA时,value不能使用属性,value只能使用标签

<!--第二种方案:使用<![CDATA[]]>-->        <property name="result">            <!--value标签只能使用-->            <value><![CDATA[2 < 3]]></value>        </property>

///set注入特殊字符  30    @Test    public void testSpecial(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("set-di.xml");        MathBean mathBean = applicationContext.getBean("mathBean", MathBean.class);        System.out.println(mathBean);    }

set注入专题2和p命名空间注入_xml_06