目录
Test 测试类中 从 Ioc 容器 获取 Student 对象
技术背景
为什么要学习spring 框架?,和学习spring 框架可以解决什么问题?在学习spring的时候,我们要带着问题去学习。
为什么要学习spring 框架?
答:之前基于三层模型开发时,在业务逻辑的代码中能看到很多的手动new对象的代码,这样会造成高度耦合。
什么是高度耦合 ?,高度耦合有什么影响?
高度耦合是指系统或组件之间的依赖关系过于紧密,导致一个部分的改动会影响到其他部分。这种紧密依赖使得系统难以维护和扩展。
高度耦合的影响:
维护困难:修改一个组件可能需要调整多个相关组件,增加了维护的复杂性和成本。
扩展性差:添加新功能时,可能需要改动大量现有代码,影响系统的灵活性和扩展性。
可重用性低:组件因依赖过多,难以独立使用,降低了代码的可重用性。
测试复杂:由于组件间依赖紧密,单独测试一个组件变得困难,增加了测试的复杂性。
风险增加:一个组件的错误可能波及整个系统,增加了系统故障的风险。
示例:
假设有一个电商系统,订单处理模块直接依赖库存管理模块和支付模块,且这些模块之间紧密关联。如果库存管理模块的接口变动,订单处理模块也需要相应调整,甚至可能影响到支付模块。
总结:
高度耦合会增加系统的复杂性,降低灵活性和可维护性。通过降低耦合,可以提高系统的模块化和可维护性。
为什么手动new对象的代码,这样会造成高度耦合?
答:接口和 实现类之前依赖特别紧密
原因:
基于三层架构:无论是service,dao/mapper 都会有对应的实现类 实现对应的接口 。一般是 接口类型 接口名=new 具体实现类 。如果实现类中【构造方法参数,实现类的类名】发生改变,那么因它导致之前通过 new 的对象 都会因此报错。为了解决这种 接口和 实现类这种 紧密的关系,才有了 spring 框架。
学习spring 框架可以解决什么问题?
学习spring 框架 可以 降低 耦合性 有利于 代码的维护 和扩展
第一个问题:spring 框架是怎么降低 耦合性的【具体的实现】?
- 之前因 手动new 创建对象 导致 高度耦合性。spring 框架 是把 对象的创建权 从使用者,交给第三方 来实现 对象的创建 ,具体是 通过 工厂 来设计,生产 对象的。
第二问题:spring怎么知道 要生产什么样的对象?
- 这在之后的学习会知道,通过在spring 的配置文件中 添加 目标对象 一般是通过<bean>...</bean> 实现
第三个问题:怎么从 spring 获得指定的对象?
- 这在之后的学习会知道,创建一个容器对象,通过调用 getBean方法获得指定对象
第四个问题:如何管理 创建对象,对象和对象之前的 关系应该怎么维护?
- 这在之后学习 Dl 依赖注入 会提到
根据上面提到的问题 spring 框架解决 主要依赖以下 spring框架的 核心
了解spring框架的核心体现
控制反转 ( IOC )
指的是将对象的创建权交给 Spring 去创建。使用 Spring 之前,对象的创建都是由我们自己在代码中new创建。而使用 Spring 之后。对象的创建都是给了 Spring 框架。
应用场景:创建对象
依赖注入( DI )
是指依赖的对象不需要手动调用 setXX 方法去设置,而是通过配置赋值。
应用场景:为属性赋值【对象。。。。】
面向切面编程 (AOP )
之后的博客会详细介绍IOC,Dl,AOP
入门案例
使用 IDEA 创建 Student 类 ,类中有3个字段 id,name ,gender 搭建 spring 框架 当 id=1 ,name=李华,gender=" 男"获取三个字段的值 并打印在控制台中。
步骤
1 导入 依赖
1.1 向 pom文件中添加 spring-context 依赖
步骤
1 从maven 中央仓库中获取 spring-context 依赖 坐标
- 如果不清楚的,可以看 我之前写的博客:CSDN
2 复制粘贴到pom文件中,使用 <dependencies> </dependencies> 标签 包裹
3 刷新
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.23</version> </dependency>
2 搭建三层架构体现【根据实际情况 构建】
2.1 基本的 service 层 ,dao/mapper 层 ,entity 【实体类】
3 添加配置文件
3.1 新建--xml配置文件-Spring 配置
3.2 创建完成后
3.3 为目标类 在xml 配置文件中添加 bean 标签
bean 标签的属性
- id:唯一标识符
- class:目标类的路径【包名+类名】
注意:每一个对象 都对应一个bean 标签
property标签 的属性
- name: 字段名
- value:给属性赋值
注意:给属性赋值,使用 property 标签
Test 测试类中 从 Ioc 容器 获取 Student 对象
步骤
1 创建 IOC容器对象
2 调用getBean方法
package fs; import fs.entity.Student; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { // 创建 IOC容器对象的同时,加载配置文件 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("springConfig.xml"); // 调用 getBean 方法 通过向下转型的方式获得 Student 对象 Student student = (Student) context.getBean("student"); System.out.println(student); } }
运行结果
总结
本篇博客,介绍了 为什么要学习 spring框架?,学习spring 框架可以解决什么问题?以及如何初步的使用 spring 框架 创建 对象