Spring5 框架 ---- IOC容器(二)

举报
在人间负债^ 发表于 2024/11/26 15:48:33 2024/11/26
【摘要】 1. IOC操作Bean管理(xml注入其他类型属性) 1. 字面量null 值<property name="address"><null/></property>属性值包含特殊符号属性值包含特殊符号需要对特殊符号进行特殊处理转移字符&1t、&gt把特殊符号内容写到<![CDATA[]]> <property name="address"> <valu...

1. IOC操作Bean管理(xml注入其他类型属性)

1. 字面量

  1. null 值
<property name="address"><null/></property>

image.png

  1. 属性值包含特殊符号
    属性值包含特殊符号需要对特殊符号进行特殊处理
    1. 转移字符&1t&gt
    2. 把特殊符号内容写到<![CDATA[]]>
        <property name="address">
            <value><![CDATA[<<南京>>]]></value>
        </property>

image.png

2. 注入属性-外部bean

  1. 创建两个类 service 类和 dao 类
package com.fickler.spring5.service;

import com.fickler.spring5.dao.UserDao;

/**
 * @author dell
 * @version 1.0
 */
public class UserService {

    //创建UserDao类型属性,生成set方法
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void add(){
        System.out.println("service add ...");
        userDao.update();
    }

}

package com.fickler.spring5.dao;

/**
 * @author dell
 * @version 1.0
 */
public class UserDaoImpl implements UserDao{

    @Override
    public void update() {
        System.out.println("UserDaoImpl ...");
    }
}

  1. 在 service 调用 dao 里面的方法
  2. 在 spring 配置文件中进行配置
<?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">

    <!--service和dao对象创建-->
    <bean id="userService" class="com.fickler.spring5.service.UserService">
        <!--注入userDao对象
            name属性:类里面属性名称
            ref属性:创建userDao对象bean标签id值-->
        <property name="userDao" ref="userDao"></property>
    </bean>
    <bean id="userDao" class="com.fickler.spring5.dao.UserDaoImpl"></bean>

</beans>
  1. 测试输出
package com.fickler.spring5.testdemo;

import com.fickler.spring5.Book;
import com.fickler.spring5.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author dell
 * @version 1.0
 */
public class TestBean {

    @Test
    public void testAdd(){

        //1.加载配置spring配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean2.xml");

        //2.获取配置创建的对象
        UserService userService = applicationContext.getBean("userService", UserService.class);

        userService.add();

    }

}

image.png

3. 注入属性-内部bean

  1. 一对多关系:部门和员工
    一个部门有多个员工,一个员工属于一个部门
    部门是一,员工是多

  2. 在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示

部门类

package com.fickler.spring5.bean;

/**
 * @author dell
 * @version 1.0
 */
public class Dept {

    private String name;

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

员工类

package com.fickler.spring5.bean;

/**
 * @author dell
 * @version 1.0
 */
public class Emp {

    private String name;
    private String gender;
    private Dept dept;

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

    public void setGender(String gender) {
        this.gender = gender;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }
}

  1. 在 spring 配置文件中进行配置
<?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">

    <!--内部bean-->
    <bean id="emp" class="com.fickler.spring5.bean.Emp">
        <!--先设置两个普通属性-->
        <property name="name" value="lucy"></property>
        <property name="gender" value=""></property>
        <!--设置对象类型属性-->
        <property name="dept">
            <bean id="dept" class="com.fickler.spring5.bean.Dept">
                <property name="name" value="安保部"></property>
            </bean>
        </property>
    </bean>

</beans>
  1. 测试输出
    @Test
    public void testBean2(){

        //1.加载配置spring配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean3.xml");

        //2.获取配置创建的对象
        Emp emp = applicationContext.getBean("emp", Emp.class);

        emp.add();

    }

image.png

4. 注入属性-级联赋值

  1. 第一种写法
<?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">

    <!--级联赋值-->
    <bean id="emp" class="com.fickler.spring5.bean.Emp">
        <property name="name" value="lucy"></property>
        <property name="gender" value=""></property>
        <!--级联赋值-->
        <property name="dept" ref="dept"></property>
    </bean>
    <bean id="dept" class="com.fickler.spring5.bean.Dept">
        <property name="name" value="财务部"></property>
    </bean>

</beans>

image.png

  1. 第二种写法
<?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">

    <!--级联赋值-->
    <bean id="emp" class="com.fickler.spring5.bean.Emp">
        <property name="name" value="lucy"></property>
        <property name="gender" value=""></property>
        <!--级联赋值-->
        <property name="dept" ref="dept"></property>
        <property name="dept.name" value="技术部门"></property>
    </bean>
    <bean id="dept" class="com.fickler.spring5.bean.Dept">
        <property name="name" value="财务部"></property>
    </bean>

</beans>
    public Dept getDept() {
        return dept;
    }

image.png

2. IOC操作Bean管理(xml注入集合属性)

1. 注入数组类型

2. 注入List集合类型属性

3. 注入Map集合类型属性

  1. 创建类,定义数组、list、map、set 类型属性,生成对应 set 方法
package com.fickler.spring5.collectiontype;

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

/**
 * @author dell
 * @version 1.0
 */
public class Stu {

    //数组类型属性
    private String[] courses;

    public void setCourses(String[] courses) {
        this.courses = courses;
    }

    //List集合属性
    private List<String> list;

    public void setList(List<String> list) {
        this.list = list;
    }

    //Map集合类型属性
    private Map<String, String> map;

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    //set集合属性
    private Set<String> set;

    public void setSet(Set<String> set) {
        this.set = set;
    }
}

  1. 在 spring 配置文件进行配置
<?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">

    <!--集合类型属性注入-->
    <bean id="stu" class="com.fickler.spring5.collectiontype.Stu">
        <!--数组类型属性注入-->
        <property name="courses">
            <array>
                <value>java</value>
                <value>数据库课程</value>
            </array>
        </property>
        <!--list类型属性注入-->
        <property name="list">
            <list>
                <value>张三</value>
                <value>小三</value>
            </list>
        </property>
        <!--map类型属性注入-->
        <property name="map">
            <map>
                <entry key="JAVA" value="java"></entry>
                <entry key="PHP" value="php"></entry>
            </map>
        </property>
        <!--set类型属性注入-->
        <property name="set">
            <set>
                <value>数据库</value>
                <value>Redis</value>
            </set>
        </property>
    </bean>

</beans>
  1. 测试输出
    @Test
    public void testCollection(){

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean5.xml");

        Stu stu = applicationContext.getBean("stu", Stu.class);
        stu.test();

    }

image.png

4. 在集合里面设置对象类型值

  1. List 集合的对象是 course
    private List<Course> list;

    public void setList(List<Course> list) {
        this.list = list;
    }
  1. 修改 spring 的配置文件
<!--list类型属性注入-->
        <property name="list">
            <list>
                <ref bean="course1"></ref>
                <ref bean="course2"></ref>
            </list>
        </property>
    <!--创建多个course对象-->
    <bean id="course1" class="com.fickler.spring5.Course">
        <property name="name" value="Spring5框架"></property>
    </bean>
    <bean id="course2" class="com.fickler.spring5.Course">
        <property name="name" value="MyBatis框架"></property>
    </bean>
  1. 测试输出

image.png

5. 把集合注入部分提取出来

  1. 在 Spring 配置文件中引入名称空间 util
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

</beans>
  1. 使用 util 标签完成 list 集合注入提取
    <!--提取list集合类型属性注入-->
    <util:list id="list">
        <value>易筋经</value>
        <value>九阴真经</value>
        <value>九阳真经</value>
    </util:list>
    <!--提取list集合类型属性注入使用-->
    <bean id="book" class="com.fickler.spring5.collectiontype.Book">
        <property name="list" ref="list"></property>
    </bean>
  1. 测试输出
    image.png
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。