一、IOC、DI和AOP思想提出
1.三种思想提出
IOC理解
- IOC(Inversion of Control):控制反转,就是将创建对象和对象之间的调用过程交给Spring进行管理
- IOC的主要作用是为了降低程序或者系统的耦合度
- 入门案例就是按照IOC来实现的
- IOC底层使用XML、工厂模式、反射等方式实现
DI理解(Dependency Injection)
依赖注入,它指的就是Spring在管理某个类的时候会将该类依赖的属性注入(设置)进来,也就是说在创建对象的过程中,向类里面的属性中设置值。
注意:依赖注入不能单独存在,须在控制反转基础之上完成,用更通俗点的话来说,就是注入类里面的属性值,不能直接注入,须创建类的对象再完成注入。
二、Spring框架的诞生
1.Spring框架的诞生
spring官网:www.spring.io
2.Spring Framework技术栈
3.BeanFactory快速入门
4.ApplicationContext快速入门
BeanFactory与ApplicationContext的关系
5.BeanFactory的继承体系
6.ApplicationContext的继承体系
注:
- BeanFactory 才是 Spring 容器中的顶层接口。ApplicationContext 是它的子接口。
- ApplicationContext:只要一读取配置文件,默认情况下就会创建对象。
- BeanFactory:懒加载方式,什么时候使用什么时候创建对象。
三、基于XML的Spring应用
什么是Bean管理
Bean管理就是两个操作:(1) Spring创建对象; (2)Spring注入属性
Bean管理的两种方式
(1) 基于XML方式实现;(2) 基于注释实现
1.SpringBean的配置详解
2.Bean的生命周期
实例化->基础配置->初始化->销毁
基础配置又叫注入:对象属性注入就是@autowire等注解注入,存循环依赖问题,bean/容器属性注入指的是使用xxxAware接口的注入,用于通知加载指定资源
注:循环依赖有没有被解决主要是看单例不单例,单例的循环依赖都会被解决
项目的循环依赖一般就是两种情况:包冲突;单例代理导致的
@DependsOn注解主要用于指定当前bean所依赖的beans。任何被指定依赖的bean都由Spring保证在当前bean之前创建。在少数情况下,bean不是通过属性或构造函数参数显式依赖于另一个bean,但却需要要求另一个bean优先完成初始化,则可以使用@DependsOn这个注解。
@DependsOn既可以指定初始化依赖顺序,也可以指定bean相应的销毁执行顺序(仅在单例bean的情况下)。
可用于任何直接或间接带@Component注解的bean或在用@Bean注释的方法上。 如果使用的是xml配置,则需要使用<bean dependens on=“…”/>标签.
简单描述就是@DependsOn可以控制bean的创建、初始化(InitializingBean)、销毁方法执行顺序。
bean的作用范围
单例对象:scope=“singleton”
一个应用只有一个对象的实例。
生命周期:
对象出生:当应用加载,创建容器时,对象就被创建了。
对象活着:只要容器在,对象一直活着。
对象死亡:当应用卸载,销毁容器时,对象就被销毁了。
多例对象:scope=“prototype”
每次访问对象时,都会重新创建对象实例。
生命周期:
对象出生:当使用对象时,创建新的对象实例。
对象活着:只要对象在使用中,就一直活着。
对象死亡:当对象长时间不用时,被 java 的垃圾回收器回收了。
3.基于XML的Spring应用
(1)Spring的get方法
(2)Spring配置非自定义的Bean
3.Bean实例化的基本流程
4.Spring的工厂后处理器
5.Spring的bean后处理器
6.Spring Bean的生命周期
Bean实例属性填充
循环依赖
解决循环依赖问题:
①构造器的循环依赖: 这种依赖spring是处理不了的,直接抛出异常。
②单例模式下的setter循环依赖: 通过"三级缓存"处理循环依赖,能处理。
③多例模式下的setter循环依赖: 不能处理,会一直产生新的Bean,导致OOM。
第一步图,之后按照上述文字往二级和一级里放(图不截了,后续还有源码也不截了)
7.常用的Aware接口
8.Spring Ioc整体流程总结
9.Spring xml方式整合第三方框架
xml整合第三方框架有两种整合方案:
- 不需要自定义名空间,不需要使用Spring的配置文件配置第三方框架本身内容,例如:MyBatis;
- 需要引入第三方框架命名空间,需要使用Spring的配置文件配置第三方框架本身内容,例如: Dubbo。
Spring整合MyBatis,之前已经在Spring中简单的配置了SqlSessionFactory,但是这不是正规的整合方式MyBatis提供了mybatis-spring.jar专门用于两大框架的整合。
Spring整合MyBatis的步骤如下:
- 导入MyBatis整合Spring的相关坐标; (请见资料中的pom.xml)
- 编写Mapper和Mapper.xml;
- 配置SqlSessionFactoryBean和MapperScannerConfigurer;
- 编写测试代码
Spring整合MyBatis的原理剖析:
整合包里提供了一个SqlSessionFactoryBean和一个扫描Mapper的配置对象,SqlSessionFactoryBean一旦被实例化,开始扫描Mapper并通过动态代理产生Mapper的实现类存储到Spring容器中。
相关的有如下四个类:
- SqlSessionFactoryBean: 需要进行配置,用于提供SqlSessionFactory;
- MapperScannerConfigurer: 需要进行配置,用于扫描指定mapper注册BeanDefinition;
- MapperFactoryBean:Mapper的FactoryBean,获得指定Mapper时调用getObject方法
- ClassPathMapperScanner: definitionsetAutowireMode(2) 修改了自动注入状态,所以MapperFactoryBean中的setSqlSessionFactory会自动注入进去。
四、基于注解的Spring应用
1.Bean的基本注解开发
2.Bean依赖注入注解开发
@Autowired 根据类型进行注入,如果统一类型的Bean有多个,尝试根据名字进行二次匹配,匹配不成功报错
@Qualifier("userDao2")//在此,在属性上需要结合@Autowired一起使用,作用是根据名称注入相应的Bean,如果是作用在方法的参数上并且根据名称注入,则只需要使用@Qualifier,如果根据类型注入,可以什么都不写
@Resource(name="userDao2") //不指定名称参数时,根据类型注入,指定名称就根据名称注入
3.非自定义Bean注解开发
4.Bean配置类的注解开发
5.Spring配置其他注解
6.Spring注解的解析原理
7.Spring注解方式整合第三方框架
五、Spring的AOP开发
1.AOP简介
2.基于xml配置的AOP
xml方式AOP快速入门
xml方式AOP配置详解
xml方式AOP原理剖析
3.基于注解配置的AOP
注解方式AOP基本使用
注解方式配置AOP详解
注解方式AOP原理剖析
六、基于AOP的声明式事务控制
1.Spring事务编程概述
2.搭建测试环境
3.基于xml的声明式事务控制
4.基于注解声明式事物控制
七、Spring整合web环境
1.Spring整合web环境
(1)Javaweb三大组件及环境特点
(2)Spring整合web环境的思路及实现
(3)Spring的web开发组件spring-web
2.web层MVC框架思想与设计思路
八、SpringMVC框架
1.SpringMVC简介
(1)SpringMVC概述
(2)SpringMVC快速入门
(3)Controller中访问容器中的Bean
(4)SpringMVC关键组件浅析
2.SpringMVC的请求处理
(1)请求映射路径的配置
(2)请求数据的接收
3.Spring MVC的响应处理
4.Spring MVC的拦截器
5.SpringMVC的全注解开发
6.SpringMVC的组件原理剖析
7.SpringMVC的异常处理机制
(1)SpringMVC异常的处理流程
(2)SpringMVC的异常处理方式
(3)异常处理机制原理剖析
(4)SpringMVC常用的异常解析器
详细视频见b站黑马视频:151-SpringMVC框架-异常处理-常见的异常处理器【完结】_哔哩哔哩_bilibili