Spring原理
2019-11-11 13:42:54 0 举报
AI智能生成
spring原理,APO,IOC
作者其他创作
大纲/内容
spring框架
Spring核心知识
WEB层:SpringMVC
业务层:Spring的IoC
持久层:Spring的JDBCTemplate
IOC:控制反转
spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring来管理这些,实现解耦
XML技术
XML样例
XML解析方式
Dom4j、Sax、Pull
Dom4j与Sax区别
dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml,也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性,所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j。
使用dom4j解析xml
XML与JSON区别
Xml是重量级数据交换格式,占宽带比较大。JSON是轻量级交换格式,xml占宽带小。所有很多互联网公司都会使用json作为数据交换格式很多银行项目,大多数还是在使用xml。
手写SpringIOCXML版本
手写SpringIOC注解版本
常用反射工具类
AOP:面向切面编程
AOP: Aspect Oriented Programming 面向切面编程。
关注点
重复代码
切面
关注点形成的类,就叫切面(类)
切入点
执行目标对象方法,动态植入切面代码
作用:把非业务代码的公共部分抽离出来,降低业务之间的耦合度,提高程可重用性,提高开发的效率
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理
原理:可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
AOP底层实现原理
代理设计模式
应用场景:SpringAOP、事物原理、日志打印、权限控制、远程调用、安全代理 可以隐蔽真实角色
代理分类
静态代理(静态定义代理类)
由程序员写定,在程序运行前就已经确定代理类和委托类的关系。
动态代理(动态生成代理类)
Jdk自带动态代理
利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
Cglib 、javaassist(字节码操作库)
利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
CGLIB动态代理与JDK动态区别
java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
AOP编程使用
注解版本实现AOP
XML方式实现AOP
AOP编程应用场景
日志记录,性能统计,安全控制,事务处理,异常处理
Spring事务使用
事务基本特性
⑴\t 原子性(Atomicity)
事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
⑵\t 一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
⑶\t 隔离性(Isolation)
多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
⑷\t 持久性(Durability)
一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
事务控制分类
编程式事务控制
自己手动控制事务,就叫做编程式事务控制。
声明式事务控制
Spring提供了对事务控制的实现。用户如果想用Spring的声明式事务管理,只需要在配置文件中配置即可; 不想使用时直接移除配置。这个实现了对事务控制的最大程度的解耦。
手写Spring事务框架
编程事务实现
使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
AOP技术封装手动事务
使用事务注意事项
声明事务实现
其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
注解版本声明
手写Spring注解版本事务
注解
内置注解
实现自定义注解
Spring事物传播行为
SpringMVC原理
SpringMVC的运行流程
⑴ 用户发送请求至前端控制器DispatcherServlet⑵ DispatcherServlet收到请求调用HandlerMapping处理器映射器。⑶ 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。⑷ DispatcherServlet通过HandlerAdapter处理器适配器调用处理器⑸ 执行处理器(Controller,也叫后端控制器)。⑹ Controller执行完成返回ModelAndView⑺ HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet⑻ DispatcherServlet将ModelAndView传给ViewReslover视图解析器 ⑼ ViewReslover解析后返回具体View ⑽ DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。 ⑾ DispatcherServlet响应用户。
Servet
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
手写SpringMVC思路
1.web.xml加载
为了读取web.xml中的配置,我们用到ServletConfig这个类,它代表当前Servlet在web.xml中的配置信息。通过web.xml中加载我们自己写的MyDispatcherServlet和读取配置文件。
2.初始化阶段
在前面我们提到DispatcherServlet的initStrategies方法会初始化9大组件,但是这里将实现一些SpringMVC的最基本的组件而不是全部,按顺序包括
3.运行阶段
每一次请求将会调用doGet或doPost方法,所以统一运行阶段都放在doDispatch方法里处理,它会根据url请求去HandlerMapping中匹配到对应的Method,然后利用反射机制调用Controller中的url对应的方法,并得到结果返回。
手写SpringMVC基本实现
OnRefresh 是FrameworkServlet类中的提供的模块方法,在其之类DispatchServlet中进行了重写,主要用于刷新Spring在web功能实现中所必须使用的全局变量。
自由主题
0 条评论
回复 删除
下一页