spring02IOC
2024-06-27 15:49:03
1.创建所需要的Student 和 Grade实体类
public class Student { //学生实体类private String name; //姓名private Integer age; //年龄private Grade grade; //年级 @Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", grade=" + grade+ "]";}public Student() {super();}public Student(String name, Integer age) {super();this.name = name;this.age = age;}public String getName() {return name;}// set() DI 依赖注入public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Grade getGrade() {return grade;}public void setGrade(Grade grade) {this.grade = grade;}}
public class Grade { //年级实体类private String name; //年级名称 @Overridepublic String toString() {return "Grade [name=" + name + "]";}public Grade() {super();}public Grade(String name) {super();this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
2.创建对应的applicationContext.xml文件 方法项目中的src目录下
<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置Grade 类的bean 01.设值注入 保证类中有属性对应的set()即可 --><bean id="grade" class="cn.bdqn.bean.Grade"><!-- name的属性值 默认使用DI 查询类中的setName() --><property name="name" value="1年级"/></bean><!-- 配置学生Bean 实例化学生对象 默认执行的是无参构造 --><bean id="student" class="cn.bdqn.bean.Student"><property name="name" value="小马"/><property name="age" value="50"/><!-- 对类中的域属性 赋值 使用ref --><property name="grade" ref="grade"/></bean> </beans>
3.创建对应的测试类
public class StudentTest {@Testpublic void test01(){ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");/** 获取容器给我们创建的Student对象 ioc的体现* 本身由自身创建对象的过程,把创建对象的权利移交给了spring容器! IOC 控制反转* * 之前 Student student=new Student();* 现在context.getBean("student");* context容器来创建对象了* */Student student=(Student) context.getBean("student");System.out.println(student);} }
4.运行查看效果
5.修改Student类中的代码 为了验证 使用构造注入的时候可以省略set、get以及无参构造方法
public class Student { //学生实体类private String name; //姓名private Integer age; //年龄private Grade grade; //年级 @Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", grade=" + grade+ "]";}//带参构造public Student(String name, Integer age, Grade grade) {super();this.name = name;this.age = age;this.grade = grade;}}
6.修改applicationContext.xml文件中的内容
<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置Grade 类的bean --><bean id="grade" class="cn.bdqn.bean.Grade"><!-- name的属性值 默认使用DI 查询类中的setName() --><property name="name" value="1年级"/></bean><!-- 02.构造注入 调用带参构造来创建对象的实例保证类中有相应的带参构造 set()和无参构造 都可以 消失了... --><bean id="student" class="cn.bdqn.bean.Student"><!-- 001.使用参数下标<constructor-arg index="0" value="小马"/><constructor-arg index="1" value="50"/><constructor-arg index="2" ref="grade"/> --><!--002.按照参数的顺序 必须和参数顺序 一致 <constructor-arg value="小马1"/><constructor-arg value="501"/><constructor-arg ref="grade"/> --><!--003.使用构造参数名称 不是全局变量 进行注入 推荐使用 --><constructor-arg name="name" value="小马2"/><constructor-arg name="age" value="502"/><constructor-arg name="grade" ref="grade"/></bean></beans>
7.测试代码不变直接运行查看效果
8.使用p命名空间注入 修改Student实体类,因为p注入需要对应的set()和无参构造器
![](/assets/blank.gif)
![](/assets/blank.gif)
public class Student { //学生实体类private String name; //姓名private Integer age; //年龄private Grade grade; //年级@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", grade=" + grade+ "]";}// p 注入的时候需要public Student() {super();}//带参构造public Student(String name, Integer age, Grade grade) {super();this.name = name;this.age = age;this.grade = grade;}//p 必须要有set()public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Grade getGrade() {return grade;}public void setGrade(Grade grade) {this.grade = grade;}}
Student实体类
9.修改applicationContext.xml文件
![](/assets/blank.gif)
![](/assets/blank.gif)
<?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:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置Grade 类的bean --><bean id="grade" class="cn.bdqn.bean.Grade"><!-- name的属性值 默认使用DI 查询类中的setName() --><property name="name" value="1年级"/></bean><!-- 03.使用p命名空间注入 必须有set()和 无参构造函数 <bean id="student" class="cn.bdqn.bean.Student" p:name="小马哥" p:age="50" p:grade-ref="grade"/>--><!-- 04.使用c命名空间注入 必须要有对应的带参构造 --><bean id="student" class="cn.bdqn.bean.Student" c:name="小马哥" c:age="50" c:grade-ref="grade"/> </beans>
applicationContext.xml
10.测试代码不动 直接运行看效果
转载于:https://www.cnblogs.com/xtdxs/p/7097144.html
spring02IOC相关推荐
最新文章
- SQL Server 中print Datetime类型问题
- 2.1.2 数据通信基础知识
- 网络情况不稳定 无法连接服务器,提示网络正常无法连接服务器
- 磁珠与电感的区别,看了就灰常明白了
- misc高阶 攻防世界_攻防世界 Misc 进阶题(一)
- webpack 配置详解
- php cdi_Quarkus的其他(非标准)CDI功能
- Docker学习五:Docker 数据管理
- 初中节点法分析电路_有关初中物理电路分析题的一些小技巧
- centos 搭建web平台
- 【语音识别】之梅尔频率倒谱系数(mfcc)及Python实现
- cpu顶盖怎么看步进_拆解报告|360AI音箱,深度硬件解析,带你看懂360智能音箱内部...
- ASP.NET 页面双向静态化
- Quartus II 安装
- 他是“自由软件”之父,天才程序员,史上最伟大的黑客!最后却黯然离场
- 性能监控与服务器监控
- 【LAMP 基于 Red Hat Linux 7】
- flutter需要定义product flavors
- 软件开发模型/原型法/瀑布模型/螺旋模型
- PHP简易商城(一)概述
热门文章
- VB 提取TextBox 文本框中指定一行字符串
- vb中line的用法[转]
- 首个月球旅客!SpaceX将送普通人上太空,马斯克暗示首单来自日本
- 用FBI通缉犯照片集,考验亚马逊人脸识别,意外发现了隐情
- 随手刷屏的波士顿动力机器人,用3D打印解决了哪些问题
- 在前端团队的那些日子(初见)
- 08Vue.js快速入门-Vue综合实战项目
- 使用MATLAB贝叶斯工具箱(BNT),进行吉布斯采样(Gibbs Sampling)之前需要做的编译工作...
- FarPoint表格数字框中小数点位数的设置
- Ubuntu打印机控制命令笔记