1 知识回顾
1.1 Spring5 系统架构
具体介绍
(1)核心容器Core Container
① 由 spring-beans、spring-core、spring-context 和 spring-expression(Spring Expression Language, SpEL) 4 个模块组成。
② 包含了控制反转(IOC),依赖注入(DI),Bean 生命周期
控制、框架事件体系等功能
(2)AOP和设备支持
① 由 spring-aop、spring-aspects 和 spring-instrument 3 个模块组成
② spring-aspects 模块集成自 AspectJ 框架,主要是为 Spring AOP 提供多种 AOP 实现方法。
③ spring-instrument 模块是基于 JAVA SE 中的”java.lang.instrument”进行设计的,应该算是
AOP 的一个支援模块,主要作用是在 JVM 启用时,生成一个代理类,程序员通过代理类在运行时修改类
的字节,从而改变一个类的功能,实现 AOP 的功能
(3)数据访问及集成
① 由spring-jdbc、spring-tx、spring-orm、spring-jms 和 spring-oxm 5 个模块组成。
② spring-jdbc 模块是 Spring 提供的 JDBC 抽象框架的主要实现模块,用于简化 Spring JDBC。主
要是提供 JDBC 模板方式、关系数据库对象化方式
③ spring-tx 模块是 Spring JDBC 事务控制实现模块。
④ spring-orm 模块是 ORM 框架支持模块,主要集成 Hibernate, Java Persistence API (JPA) 和Java Data Objects (JDO) 用于资源管理、数据访问对象(DAO)的实现和事务策略
(4)Web
① 由 spring-web、spring-webmvc、spring-websocket 和 spring-webflux 4 个模块组成.
② spring-web 模块为 Spring 提供了最基础 Web 支持,主要建立于核心容器之上,通过 Servlet 或
者 Listeners 来初始化 IOC 容器,也包含一些与 Web 相关的支持。
② spring-webmvc 模 块 众 所 周 知 是 一 个 的 Web-Servlet 模 块 , 实 现 了 Spring MVC
(model-view-Controller)的 Web 应用。
(5)报文发送:即spring-messaging模块
(6)Test:即spring-test模块
1.2 IOC容器
1、Bean管理中的环节与常规调用方式间的对应关系
Bean管理 包括 对象创建和属性注入两部分
IOC容器是通过控制反转促进低耦合,将一个对象依赖的其他对象以被动方式传递进来,而不是这个对象自己创建,那两个过程功能上是有相互对应的地方。
但其实是不同的过程,比如@Autowired自动注入 和 new,前者类似于setter方法(属性注入),是把已经实例化的对象赋值到新设置的变量上(同时说明实例化在之前已经完成了),而new是新实例化的过程。
这个表只是功能上相近的比对
常规引用对象方式步骤 | xml配置Bean管理对应环节 | 注解Bean管理对应环节 |
---|---|---|
import导入依赖 | 在 bean 属性中输入的class是类的完整路径信息,相当于导入 | 开启注解扫描时指定的扫描范围 |
通过new创建对象 | 使用< bean> 标签创建对象 | @Component等 |
new中调用有参构造方法 | < bean> 中使用< property>设置属性(会调用属性的set方法) | @Autowired属性自动注入 |
1.3 AOP
xml配置方式忘就忘了吧,繁琐也不常用,这里只回顾注解的方式
前置是需要开启注解扫描及开启Aspect生成代理对象
然后增强的方式其实很简单,创建一个增强类并编写增强方法。在增强方法上面添加注解决定增强的切入点
比如@Around(value = “execution(* com.atguigu.spring5.aopanno.User.add(…)”)
1.4 JdbcTemplate
用来方便对数据库进行操作,但是后续开发中常用MyBatis,这个了解即可
使用方法其实就三步:
1、配置数据库连接池的信息,可以在xml文件中配置,也可以使用properties文件
2、像创建其他对象一样,在配置中创建JdbcTemplate对象,并对dataSource属性进行注入(即1中的连接池信息)
3、在需要的地方使用@Autowired注入JdbcTemplate对象。调用其中的方法完成增删改查
1.5 事务
使用方法和JdbcTemplate类似,也是三步:
1、配置数据库连接池的信息,可以在xml文件中配置,也可以使用properties文件
2、像创建其他对象一样,在配置中创建事务管理器对象,并对dataSource属性进行注入(即1中的连接池信息)并开启事务注解
3、在需要的类和方法上面添加@Transactional注解
事务参数有一些需要注意的
1、事务隔离级别 ioslation
2、事务传播行为 propagation
1.6 完全注解开发
企业开发中使用的完全注解开发还得靠springboot来实现,spring也能完成,不过相较繁琐
IOC容器、AOP、JdbcTemplate、事务其实都提供了相关的注解使用方法,但前期需要一些通用的配置还要在xml文件中实现,这些配置可以通过配置类替代
1、建立数据库连接池的bean对象 ,可使用@Bean注解
2、为JdbcTemplate和事务管理器注入数据库连接池,也可以使用@Bean注解
3、开启注解扫描、开启通知、开始事务则可以在配置上直接通过添加指定注解实现
2 疑问&解答
1、动态代理类在执行过程中是怎么影响正常类的?
动态代理类并不会影响原本的正常类,实现功能增强的方式是在原有正常类的基础上添加新的功能,只不过是通过动态代理的方式而不是通过硬编码的方式。
2、bean管理使用的xml文件中的命名空间是什么东西?
XML 命名空间
有时候需要在默认的命名空间中添加新的属性,比如
xmlns:context="…/context" 是因为下面的配置元素中要用到< context> 元素,加上命名空间防止后续出现标签命名重复的冲突
3、为什么调用的时候非要装载配置文件?
也不是非要有配置文件,这个问题等学习玩springboot后可以再来考虑
4、假如不注入属性会有什么影响吗?
这个属性注入的过程可以理解为给构造器中的参数赋值的过程,不注入就相当于没有调用对应属性的set方式,该属性保持初始默认值