一、Spring核心知识点1、IOC控制反转概念控制权的转移将对象创建和依赖管理的控制权从代码层转移到容器DI依赖注入IOC的实现方式。容器通过构造器、Setter方法或字段将依赖关系注入到对象中。2、AOP面向切面编程概念将与业务无关但被多个模块共同调用的逻辑从核心业务中分离实现解耦3、循坏依赖问题原因两个或多个Bean在创建过程中相互引用形成闭环。解决方法Spring通过三级缓存来解决循环依赖且只能解决单例作用域且使用Setter方法注入或字段注入Autowired的循环依赖。构造器注入的循环依赖无法解决且会直接抛出异常三级缓存Spring通过三级缓存提前暴露正在创建中的Bean打破循环。第一级缓存存放完全初始化好的可直接使用的成品Bean应用代码直接获取的就是这里的Bean.第二级缓存存放提前暴露的已完成实例化但是未完成属性注入和初始化的Bean的早期引用解决普通的循环依赖供其他类完成创建。第三级缓存存放创建Bean的工厂对象ObjectFactory调用getObject()方法可以返回一个Bean的早期引用用于处理存在AOP代理时的循环依赖示例A依赖B,B依赖AA和B都需要被AOP代理。1、开始创建A- 实例化A调用构造器。- 将创建A的ObjectFactory工厂放入三级缓存。- 开始为A属性注入发现需要B。2、创建B- 实例化B。- 将创建B的ObjectFactory工厂放入三级缓存。- 开始为B属性注入发现需要A。3、解决依赖获取A的早期引用。- 从一级缓存找A发现没有。- 从二级缓存找A发现没有。- 从三级缓存找到A的ObjectFactory调用getObject()。- getObject()会检查A是否需要被代理- 如果需要则生成A的代理对象并将其放入二级缓存同时删除三级缓存中的A的工厂返回代理对象。- 如果不需要则直接返回A的原始对象。4、B完成创建并被放入一级依赖并清理二、三级缓存中关于B的数据。5、A拿到B的对象完成创建。同时会检查二级缓存中是否有A的代理对象如果有则直接使用二级缓存中的代理对象作为最终Bean放入一级缓存如果没有则将初始化好的A直接放入一级缓存并清理二、三级缓存中关于A的数据。二、SpringMVC1、DispatcherServlet是核心作为统一的请求入口和调度中心协调各组件工作。2、标准请求处理流程1、接受请求DispatcherServlet解释HTTP请求。2、映射处理器调用HandlerMapping根据请求URL找到对应的处理器Controller中的方法和拦截器链。3、获取适配器通过HandlerAdapter来执行处理器。适配器模式使得不同类型的处理器如基于注解的实现特定接口的能够被统一调用。4、执行业务处理HandlerAdapter 调用实际的处理器方法执行业务逻辑并返回一个ModelAndView。5、调用ViewResolver根据处理器返回的逻辑视图名解析得到具体的View对象如jsp、thymeleaf模板。6、将响应返回给客户端。3、过滤器和拦截器过滤器JAVA Servlet中的一部分是Servlet级别的容器在服务的最外层常用于字符编码转换、安全验证等拦截器SpringMVC特有的框架在DispatcherServlet接受到请求后和Controller处理实际请求前常用于权限验证通用数据处理等。特性过滤器Filter拦截器技术规范Java Servlet 规范Spring MVC 框架特有作用范围Web应用全局对所有请求生效仅对Spring MVC 管理的请求生效进入DispatcherServlet的请求依赖关系不依赖Spring容器依赖Spring IOC容器可注入Spring Bean执行过程
JAVA常见基础知识总结(四)-Spring
发布时间:2026/6/2 9:45:35
一、Spring核心知识点1、IOC控制反转概念控制权的转移将对象创建和依赖管理的控制权从代码层转移到容器DI依赖注入IOC的实现方式。容器通过构造器、Setter方法或字段将依赖关系注入到对象中。2、AOP面向切面编程概念将与业务无关但被多个模块共同调用的逻辑从核心业务中分离实现解耦3、循坏依赖问题原因两个或多个Bean在创建过程中相互引用形成闭环。解决方法Spring通过三级缓存来解决循环依赖且只能解决单例作用域且使用Setter方法注入或字段注入Autowired的循环依赖。构造器注入的循环依赖无法解决且会直接抛出异常三级缓存Spring通过三级缓存提前暴露正在创建中的Bean打破循环。第一级缓存存放完全初始化好的可直接使用的成品Bean应用代码直接获取的就是这里的Bean.第二级缓存存放提前暴露的已完成实例化但是未完成属性注入和初始化的Bean的早期引用解决普通的循环依赖供其他类完成创建。第三级缓存存放创建Bean的工厂对象ObjectFactory调用getObject()方法可以返回一个Bean的早期引用用于处理存在AOP代理时的循环依赖示例A依赖B,B依赖AA和B都需要被AOP代理。1、开始创建A- 实例化A调用构造器。- 将创建A的ObjectFactory工厂放入三级缓存。- 开始为A属性注入发现需要B。2、创建B- 实例化B。- 将创建B的ObjectFactory工厂放入三级缓存。- 开始为B属性注入发现需要A。3、解决依赖获取A的早期引用。- 从一级缓存找A发现没有。- 从二级缓存找A发现没有。- 从三级缓存找到A的ObjectFactory调用getObject()。- getObject()会检查A是否需要被代理- 如果需要则生成A的代理对象并将其放入二级缓存同时删除三级缓存中的A的工厂返回代理对象。- 如果不需要则直接返回A的原始对象。4、B完成创建并被放入一级依赖并清理二、三级缓存中关于B的数据。5、A拿到B的对象完成创建。同时会检查二级缓存中是否有A的代理对象如果有则直接使用二级缓存中的代理对象作为最终Bean放入一级缓存如果没有则将初始化好的A直接放入一级缓存并清理二、三级缓存中关于A的数据。二、SpringMVC1、DispatcherServlet是核心作为统一的请求入口和调度中心协调各组件工作。2、标准请求处理流程1、接受请求DispatcherServlet解释HTTP请求。2、映射处理器调用HandlerMapping根据请求URL找到对应的处理器Controller中的方法和拦截器链。3、获取适配器通过HandlerAdapter来执行处理器。适配器模式使得不同类型的处理器如基于注解的实现特定接口的能够被统一调用。4、执行业务处理HandlerAdapter 调用实际的处理器方法执行业务逻辑并返回一个ModelAndView。5、调用ViewResolver根据处理器返回的逻辑视图名解析得到具体的View对象如jsp、thymeleaf模板。6、将响应返回给客户端。3、过滤器和拦截器过滤器JAVA Servlet中的一部分是Servlet级别的容器在服务的最外层常用于字符编码转换、安全验证等拦截器SpringMVC特有的框架在DispatcherServlet接受到请求后和Controller处理实际请求前常用于权限验证通用数据处理等。特性过滤器Filter拦截器技术规范Java Servlet 规范Spring MVC 框架特有作用范围Web应用全局对所有请求生效仅对Spring MVC 管理的请求生效进入DispatcherServlet的请求依赖关系不依赖Spring容器依赖Spring IOC容器可注入Spring Bean执行过程