6、IOC操作Bean管理[外部Bean、内部Bean、级联Bean、注入集合类型属性]

2023-11-13

a) 注入属性——外部bean
外部bean就是将外部的bean注入到我们需要创建的bean中
1、创建两个类——Service类和dao类
2、在Service调用dao里面的方法

public interface UserDao {public void update();}

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

public class UserService {
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {this.userDao = userDao;}
    public void add(){System.out.println("service add......");
        userDao.update();
    }
}


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


	@Test	//测试方法
    public void testService(){
        ApplicationContext context=new ClassPathXmlApplicationContext("bean02.xml");
        UserService userService=context.getBean("userService",UserService.class);
        System.out.println(userService);
        userService.add();
    }

b)注入属性——内部bean和级联赋值

  • 一、内部bean

(1)一对多关系:部门和员工
一个部门有多个员工,一个员工属于一个部门(部门是一,员工是多)
(2)在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示

/*员工类*/
public class Emp {
    private String ename;
    private String gender;
    private Dept dept;  //员工属于某一个部门,使用对象形式表示
    public void setEname(String ename) {this.ename = ename; }
    public void setGender(String gender) {this.gender = gender; }
    public void setDept(Dept dept) { this.dept = dept;}

    public void tetsdemo(){
        System.out.println(ename+"::"+gender+"::"+dept.getDname());
    }
}

public class Dept {
    private String dname;
    public void setDname(String dname) {this.dname = dname;}
    public String getDname() { return dname; }
}

@Test
public void testadddept(){
    ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
    Emp emp=context.getBean("emp",Emp.class);
    System.out.println(emp);	//com.demo.spring5.dept.Emp@17695df3
      emp.tetsdemo();		//Davidoff::男::国际部门
    }
<bean id="emp" class="com.demo.spring5.dept.Emp">
        <!--设置两个普通属性-->
        <property name="ename" value="Davidoff"></property>
        <property name="gender" value=""></property>

        <!--设置对象类型属性-->
        <property name="dept">

            <!--内部bean赋值-->
            <bean id="dept" class="com.demo.spring5.dept.Dept">
                <property name="dname" value="国际部门"></property>
            </bean>
        </property>
    </bean>
  • 二、级联Bean
    级联Bean和外部Bean有些区别,在引入外部Bean的同时,给外部Bean设置了属性。
<!--方式一:级联-->
<bean id="emp1" class="com.demo.spring5.dept.Emp">
        <property name="ename" value="Andy"></property>
        <property name="gender" value=""></property>
        <!--级联赋值-->
        <property name="dept" ref="dept"></property>
    </bean>
    <bean id="dept" class="com.demo.spring5.dept.Dept">
        <property name="dname" value="国际模特"></property>
    </bean>
//方式二:生成dept的get方法(get方法必须有!!)
    public Dept getDept() {
        return dept;
    }
    
<!--级联赋值-->
    <bean id="emp" class="com.atguigu.spring5.bean.Emp">
        <!--设置两个普通属性-->
        <property name="ename" value="jams"></property>
        <property name="gender" value="男"></property>
        <!--级联赋值-->
        <property name="dept" ref="dept"></property>
        <property name="dept.dname" value="技术部门"></property>
    </bean>
    <bean id="dept" class="com.atguigu.spring5.bean.Dept">
    </bean>

c)注入集合类型属性

  1. 注入数组类型属性

  2. 注入List集合类型属性

  3. 注入Map集合类型属性

<bean id="Stu" class="com.demo.spring5.entity.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="maps">
        <map>
            <entry key="Java" value="java"> </entry>
            <entry key="PHP" value="php"> </entry>
        </map>
    </property>

    <!--set类型属性注入-->
    <property name="sets">
        <set>
            <value>Mysql</value>
            <value>Redis</value>
        </set>
    </property>
</bean>
public class Stu {
    private String[] courses;
    private List<String> list;
    private Map<String,String> maps;
    private Set<String> sets;
    
    public void setCourses(String[] courses) {this.courses = courses;}
    public void setList(List<String> list) {this.list = list;}
    public void setMaps(Map<String, String> maps) {this.maps = maps;}
    public void setSets(Set<String> sets) {this.sets = sets;}
    public void test(){
        System.out.println(Arrays.toString(courses));
        System.out.println(list);
        System.out.println(maps);
        System.out.println(sets);
    }
}
public class TestMain {
    @Test
    public void test01(){
        ApplicationContext context=new ClassPathXmlApplicationContext("bean01.xml");
        Stu stu=context.getBean("Stu",Stu.class);
        System.out.println(stu);
        stu.test();
    }
}

/*
com.demo.spring5.entity.Stu@281e3708
[java课程, 数据库课程]
[阿瑞, 阿凡]
{Java=java, PHP=php}
[Mysql, Redis]
*/

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

public class Course {
    private String cname;

    public void setCname(String cname) {
        this.cname = cname;
    }

}

//学生所学的多门课程
private List<Course> liCourse;

	<bean id="student" class="com.demo.collection.Student">
        <property name="liCourse">
            <list>
                <ref bean="course1"></ref>
                <ref bean="course2"></ref>
            </list>
        </property>
    </bean>

    <!--创建多个course对象-->
    <bean id="course1" class="com.demo.collection.Course">
        <property name="cname" value="Spring5框架课程"></property>
    </bean>
    <bean id="course2" class="com.demo.collection.Course">
        <property name="cname" value="Mybatis框架课程"></property>
    </bean>

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

(1)、在Spring配置文件中引入名称空间util
xmlns:util=“http://www.springframework.org/schema/util”
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
(2)、使用util标签,完成list集合注入提取出来


public class Course {
    private String cname;
    public void setCname(String cname) {
        this.cname = cname;
    }
}

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


<?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"	<!--添加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	<!--添加util-->
                           ">

<!--  提取lis集合类型属性注入  -->

    <util:list id="booklist">
        <value>book01</value>
        <value>book02</value>
        <value>book03</value>
    </util:list>


    <!--  提取lis集合类型属性注入使用  -->
    <bean id="book" class="com.demo.collection.Book">
        <property name="list" ref="booklist"></property>
    </bean>
	
	@Test
    public void Test02(){
        ApplicationContext context=new ClassPathXmlApplicationContext("bean01.xml");
        Book book=context.getBean("book",Book.class);
        book.Test();    //[book01, book02, book03]
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

6、IOC操作Bean管理[外部Bean、内部Bean、级联Bean、注入集合类型属性] 的相关文章

随机推荐

  • object-c 入门基础篇

    大部分有一点其他平台开发基础的初学者看到XCode 第一感想是磨拳擦掌 看到Interface Builder之后 第一感想是跃跃欲试 而看到Objective C的语法 第一感想就变成就望而却步了 好吧 我是在说我自己 如果你和我一样 对
  • 关于char ** 如何赋值

    前段时间遇到了个问题 需要返回二维字符串数组 每行单独输出字符串 正常思路利用两个for循环挨个对每个字符进行赋值 如下 for int i 0 i lt x i for int j 0 j lt y j char i j 毕竟用两个for
  • Oracle复制行记录到同一个表(两种写法)

    Oracle复制行记录到同一个表 两种写法 通过循环 判断记录是否存在 不存在时插入数据 插入数据时 可以更新插入数据指定字段的值 请根据实际项目需要改写SQL DECLARE CURSOR dept cursor IS SELECT FR
  • C++杨辉三角(初学)

    01 C 的 杨辉三角之 第一个版本 就是最基础的 输入行数 输出打印的图形 话不多说 代码如下 include
  • Latex 特殊章节符号 (§)

    latex 的 tex 文件中 要引用的部分 S ref l 其中 S 大写 对应 l为要引用的章节对应的标签 即要引用的章节 section XXXX label l
  • java的 violate 和 synchronize

    volatile 意思是说这个变量 不必用本地副本优化 保证所有线程直接操作主存中的变量 是真正共享的 volatile讲的是可见性 跟原子操作 线程安全无关 synchronized 常常被强调的意思是互斥 保证只有一个线程进入 其实它还
  • Flutter videoplayer

    视频播放项目地址 效果图 从pub dev搜索视频播放库 但都不能满足要求 最后下载flick video项目代码 做了功能简化和修改 实现功能 列表播放时 不支持拖动修改进度亮度声音 避免滑动冲突 全屏和单一视频播放时支持 1 屏幕左侧上
  • org.apache.ibatis.exceptions.PersistenceException:

    org apache ibatis exceptions PersistenceException Error building SqlSession The error may exist in com map UserMapper xm
  • 自己的第一个DS18B20温度传感器驱动程序(简单)

    基于msp430F149系列单片机 DQ连接到PORT6 5引脚 释放总线 即 空闲状态 因为连接上拉电阻 所以单总线在空闲状态时 一直处于高电平 include 430IO h I O口定义 define DS DIR P6DIR bit
  • Python 2.打开摄像头,保存图片 OpenCV Linux

    import numpy as np import cv2 调用笔记本内置摄像头 所以参数为0 如果有其他的摄像头可以调整参数为1 2 cap cv2 VideoCapture 0 while True 从摄像头读取图片 sucess im
  • 基于用户的协同过滤推荐算法原理和实现

    在推荐系统众多方法中 基于用户的协同过滤推荐算法是最早诞生的 原理也较为简单 该算法1992年提出并用于邮件过滤系统 两年后1994年被 GroupLens 用于新闻过滤 一直到2000年 该算法都是推荐系统领域最著名的算法 本文简单介绍基
  • 空字符 空格字符(字符) 空字符串 NULL的区别

    1 空字符 空格字符 字符 2 空字符串 3 NULL的区别 1 1 字符 1 首先必须明确字符型 char 是整数类型 其在内存单元是以整数形式存放 2 其次 char类型的产生是为了用于 存储字母 数字 标点字符 非打印字符 3 为方便
  • redis学习:redis五大数据类型的之String(字符串)

    String作为redis使用最多的最广泛的数据类型 一些String的基础方法 命令 描述 示例 APPEND key value 向指定的key的value后追加字符串 127 0 0 1 6379 gt set msg hello O
  • java 登录注册课题设计_JavaWeb笔记——注册登录系统项目思路

    功能 gt 注册 gt 登录 JSP login jsp gt 登录表单 regist jsp gt 注册表单 index jsp gt 主页 只有登录成功才能看到 Servlet LoginServlet RegistServlet Se
  • jupyter notebook打不开无反应 浏览器未启动的问题

    解决办法一 将http localhost 8888 tree复制到浏览器打开 此种方法每次需要重新输入 或复制链接 略显麻烦 解决办法二 1 win r 然后输入cmd 回车打开命令窗口 2 在命令窗口中输入jupyter noteboo
  • 【Java学习笔记】API:线程

    线程API 线程的生命周期图 线程方法 run方法用于定义线程任务 interrupt方法用于中断线程 yield用于让出CPU时间 start方法用于启动线程 创建线程有两种方式 常见线程有两种方式 方式一 继承Thread并重写run方
  • WPF--关于Action事件小结

    WPF 关于Action事件小结 1 需要类实例去调用事件建立订阅关系 public event Action
  • 欧拉函数

    在数论中 对于一整数n来说 欧拉函数是指 1 n 1中与n互质的数的个数 又称 函数 欧拉商数等 例如 8 4 因为1 3 5 7均和8互质 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明 函数的值 1 1 唯一和1互
  • 串口的单线半双工模式(stm32f10x系列)

    关注 星标公众号 及时获取更多技术分享 作者 冰茶奥利奥 微信公众号 嵌入式电子创客街 这两天折腾CTS RTS硬件流控 看到说232协议的CTS RTS只是用来做半双工换向使用的 正好手头上有块stm32的板子 看了看stm32的Usar
  • 6、IOC操作Bean管理[外部Bean、内部Bean、级联Bean、注入集合类型属性]

    a 注入属性 外部bean 外部bean就是将外部的bean注入到我们需要创建的bean中 1 创建两个类 Service类和dao类 2 在Service调用dao里面的方法 public interface UserDao public