IOC操作Bean管理XML方式(注入内部 bean 和 级联赋值)

目录

 

 

1.注入属性-内部 bean

(1)一对多关系:部门和员工

(2)在实体类之间表示一对多关系

(3)在Spring 配置文件中进行配置

2.注入属性-级联赋值

(1)第一种写法类似外部bean注入

(2)第二种写法:

因为是先创建对象,get拿到对象再赋值了,这才是级联赋值


 

1.注入属性-内部 bean

前提引入:数据库表与表之间有着不同的关系【一对多,一对一,多对多】

(1)一对多关系:部门和员工

一个部门可以有多个员工,一个员工属于一个部门

(2)在实体类之间表示一对多关系

步骤:首先新建一个bean包,专门做以上操作

在bean包中,我们创建两个类

一个是Department 部门类,代码如下:

package com.lbj.spring5.bean;/*** 部门类*/
public class Department {private String dname;public void setDname(String dname) {this.dname = dname;}@Overridepublic String toString() {return "Department{" +"dname='" + dname + '\'' +'}';}
}

一个是Employee 员工类,代码如下:

package com.lbj.spring5.bean;/*** 员工类*/
public class Employee {private String ename;private String gender;public void setEname(String ename) {this.ename = ename;}public void setGender(String gender) {this.gender = gender;}//简单写一个测试方法public void add(){System.out.println(ename+"::"+gender+"::"+department);}
}

目前两个类并没有关系,需要表示他们之间的关系

现在,一个部门里面有多个员工,问题是:我们如何表示"多个"?

办法:用一个集合表示

操作:员工表示所属部门,使用对象类型属性进行表示

代码如下:

package com.lbj.spring5.bean;/*** 员工类*/
public class Employee {private String ename;private String gender;//员工属于某一个部门,使用对象形式表示private Department department;public void setDepartment(Department department) {this.department = department;}public void setEname(String ename) {this.ename = ename;}public void setGender(String gender) {this.gender = gender;}//简单写一个测试方法public void add(){System.out.println(ename+"::"+gender+"::"+department);}
}

 

(3)在Spring 配置文件中进行配置

为了便于区分,我们再次创建一个新的xml文件,bean3.xml

在bean3.xml中完成Department和Employee的操作

而且,因为上面的员工类和部门类 存在内部类的关系,接下来我们就在xml文件中实现 注入内部 bean

方法:在一个bean里面可以嵌套再定义另外一个对象

<?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="employeee" class="com.lbj.spring5.bean.Employee"><!--设置两个普通的属性--><property name="ename" value="杰克"></property><property name="gender" value="男"></property><!--设置对象的类型属性,使用的是内部嵌套的方法--><property name="department"><bean id="department" class="com.lbj.spring5.bean.Department"><property name="dname" value="后台部门"></property></bean></property></bean></beans>

 在TestBean测试类中进行测试:

package com.lbj.spring5.testdemo;import com.lbj.spring5.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestBean {@Testpublic void testBean3(){//1.加载spring配置文件ApplicationContext context=new ClassPathXmlApplicationContext("bean3.xml");//2.获取配置创建的对象,通过context得到对象Employee employee=context.getBean("employeee", Employee.class);//4.通过employee调用add()方法employee.add();}
}

 测试结果:

 

2.注入属性-级联赋值

(1)第一种写法类似外部bean注入

其实第一步我们做的内部嵌套,注入内部 bean 就是一种 级联赋值

为了方便起见,我们再次新建一个新的bean4.xml配置文件来进行 级联赋值 操作【类似外部bean注入】

代码如下:

<?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="employeee" class="com.lbj.spring5.bean.Employee"><!--设置两个普通的属性--><property name="ename" value="杰克"></property><property name="gender" value="男"></property><!--前两个属性没变化,第三个属性有变化--><property name="department" ref="department"></property></bean><bean id="department" class="com.lbj.spring5.bean.Department"><property name="dname" value="后台部门"></property></bean>
</beans>

测试效果:

 

(2)第二种写法:

员工类中有三个属性,ename和gender都属于字符串类型的属性

然而department是一个对象,这个对象的属性名字是dname 

 department.dname表示向department对象中设置dname属性的值

写完后我们发现,红色框框内是报错的 

为什么会报错呢?

因为现在要向Employee类的department对象中设置值,那么这个department对象是不是要先得到才可以去用

解决:需要生成department的get方法

报错消失:

测试结果:

因为是先创建对象,get拿到对象再赋值了,这才是级联赋值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单处理机系统的进程调度动态优先_操作系统复习笔记(王道)C2.1

进程与线程一、进程特征和概念前提&#xff1a;允许多个程序并发执行。1.概念PCB(process control block)进程控制块&#xff0c;系统利用 PCB 来描述进程的基本情况和运行状 态&#xff0c;进而控制和管理进程。PCB是进程存在的唯一标志。进程是进程实体的运行过程&#xff0c…

非线性动力学_非线性科学中的现代数学方法:综述

Ch0【引言】本文是作者的一个总结&#xff0c;力图在极度繁杂的数理知识体系中摘选出那些最广泛应用的核心工具及思想。本文主要关注的问题都是非线性的、动态的。具体地讲&#xff0c;主要涉及的是&#xff1a;微分动力系统、泛函的最优化初步&#xff08;但不涉及最优控制及微…

IOC操作Bean管理XML方式(注入集合类型属性)

目录 IOC操作Bean管理XML方式&#xff08;注入集合类型属性&#xff09; &#xff08;1&#xff09;首先进行环境的搭建和准备 &#xff08;2&#xff09;创建一个类&#xff1a;用来完成集合类型属性注入 &#xff08;3&#xff09;在Spring 配置文件进行配置 &#xff0…

matlab 最小二乘法拟合_高中数学:最小二乘法与线性回归方程

1、怎样的拟合直线最好&#xff1f;——与所有点都近&#xff0c;即与所有点的距离之和最小。最小二乘法可以帮助我们在进行线性拟合时&#xff0c;如何选择“最好”的直线。要注意的是&#xff0c;利用实验数据进行拟合时&#xff0c;所用数据的多少直接影响拟合的结果&#x…

python多次循环输出_python循环

python_day_2一. 循环. while循环while 条件:代码块(循环体)执行流程:判断条件是否为真. 如果真. 执行代码块再次判断条件是否为真......当条件为假.执行else 跳出循环. 循环结束1.让计算机连续打印5次corn,每次延迟一秒:importtimecount 1while count <5:print("corn&…

预充电电路工作原理_LED触摸调光台灯控制电路板的工作原理

一款美观实用的台灯堪称书桌上的艺术品&#xff0c;看着书桌上精致美观的台灯&#xff0c;可能还会增加一些阅读的乐趣吧。那么触摸开关台灯的工作原理到底是怎么的呢?两按键触摸调光电路板工作原理:一、两按键触摸调光电路板&#xff0c;触摸芯片工作电压2.4-5.5V。输入也可用…

IOC操作Bean管理XML方式(FactoryBean)

目录 IOC操作Bean管理XML方式&#xff08;FactoryBean&#xff09; Spring 有两种类型的bean 第一种&#xff1a;是普通的 bean 第二种&#xff1a;工厂bean FactoryBean 第一步&#xff1a;创建类&#xff0c;让这个类作为工厂bean 第二步&#xff1a;在类中实现接口里面…

python中自定义类中的self_Python类和构造方法

1.面向对象介绍描述&#xff1a;是函数的一个变种,在Python中,有函数式编程和面向对象编程,java和C#之类只能把函数写到类里,没有函数式编程,所以只有面向对象,所以在Python中有了选择,可能就变得有点麻烦,但是在Python里,函数式编程是可以完成所有的功能的,人都是想把事情变得…

激光slam_机器人主流定位技术,激光SLAM与视觉SLAM谁更胜一筹

定位技术是机器人实现自主定位导航的最基本环节&#xff0c;是机器人在二维工作环境中相对于全局坐标的位置及其本身的姿态。目前SLAM (Simultaneous Localization and Mapping&#xff0c;即时定位与地图构建)是业内主流的定位技术&#xff0c;有激光SLAM和视觉SLAM之分。什么…

IOC操作Bean管理XML方式(bean的作用域)

目录 IOC操作Bean管理XML方式&#xff08;bean的作用域&#xff09; 1.在Spring 里面&#xff0c;设置创建 bean 实例是单实例还是多实例的方式 &#xff08;1&#xff09;在Spring 配置文件bean 标签里面有属性&#xff08;scope&#xff09;用于设置单实例还是多实例 &am…

bucket sort sample sort 并行_双调排序Bitonic Sort,适合并行计算的排序算法

双调排序是data-independent的排序&#xff0c; 即比较顺序与数据无关的排序方法&#xff0c; 特别适合做并行计算&#xff0c;例如用GPU、fpga来计算。1、双调序列在了解双调排序算法之前&#xff0c;我们先来看看什么是双调序列。 双调序列是一个先单调递增后单调递减&#x…

边缘检测后去除噪点_修图前vs修图后,原来那些网红“照骗”都是这样修出来的!...

如今手机上有许多功能强大的后期app都能帮助我们轻松实现一键修图我们也经常可以在网上看到各路大神们各显神通的手机修图作品无论是风景、人像还是创意修图前和修图后对比强烈、美若两图看到这里你是否想问为什么同样是用手机修图别人修的图总是比我好看到底是哪里出错了呢&am…

IOC操作Bean管理XML方式(bean 的生命周期)

目录 IOC操作Bean管理XML方式&#xff08;bean 的生命周期&#xff09; 1.bean 的生命周期&#xff08;在单例模式下的生命周期&#xff09; &#xff08;1&#xff09;通过构造器创建 bean 的实例&#xff08;执行类中无参构造方法去创建对象&#xff09; &#xff08;2&…

springboot listener_Springboot 全套面试提升宝典,为金三银四冲刺

简介&#xff1a;Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Spring Boot致力于在蓬勃发…

IOC操作Bean管理XML方式(xml自动装配)

目录 IOC操作Bean管理XML方式&#xff08;xml自动装配&#xff09; 一.演示自动装配过程 &#xff08;1&#xff09;根据 属性名称 装配 步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; &#xff08;2&#xff09;根据 属性类型 装配 &#xff08;2.1&#…

python 判断文件是否被占用_python 在删除文件的时候检测该文件是否被其他线程或者进程占用?...

永远不要忘记&#xff1a;跨平台特性是Python的血液和命脉。在Linux下进程正在使用的文件&#xff0c;是不妨碍其他进程去移动/删除/更名的。因为在Linux下由inode确定文件&#xff0c;inode和文件路径虽然存在对应关系&#xff0c;但本质上是分离的。删除了某进程正在使用的文…

python怎么索引json中的值_使用Python在JSON中查找值

我之前已经成功地解析了JSON文件中的数据&#xff0c;但现在我要实现的函数遇到了问题。我有一个JSON格式的姓名、身份证号码和出生日期列表。我想在Python中得到的是让用户输入一个名字并检索他的身份证号码和出生日期(如果有的话)。这是我的JSON示例文件&#xff1a;[{"…

python3 json模块_详解python 3.6 安装json 模块(simplejson)

JSON 相关概念&#xff1a; 序列化&#xff08;Serialization&#xff09;&#xff1a;将对象的状态信息转换为可以存储或可以通过网络传输的过程&#xff0c;传输的格式可以是JSON&#xff0c;XML等。反序列化就是从存储区域&#xff08;JSON&#xff0c;XML&#xff09;读取反…

IOC操作Bean管理XML方式(外部属性文件)

目录 IOC操作Bean管理XML方式&#xff08;外部属性文件&#xff09; 前情引入&#xff1a; 实验演示&#xff1a; 1.直接配置数据库信息 &#xff08;1&#xff09;配置德鲁伊连接池 &#xff08;2&#xff09;引入德鲁伊连接池jar包 &#xff08;3&#xff09;创建一个b…

python实现关联算法_python使用Apriori算法进行关联性解析

从大规模数据集中寻找物品间的隐含关系被称作关联分析或关联规则学习。过程分为两步&#xff1a;1.提取频繁项集。2.从频繁项集中抽取出关联规则。 频繁项集是指经常出现在一块的物品的集合。 关联规则是暗示两种物品之间可能存在很强的关系。 一个项集的支持度被定义为数据集中…