全网最全Spring APO原理 & Spring MVC原理解析

全网最全 Spring APO原理 &Spring MVC原理解析

Spring APO 原理

一,Spring APO概念

“横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect”,即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

AOP主要应用场景有:

  • Authentication 权限
  • Caching 缓存
  • Context passing 内容传递
  • Error handling 错误处理
  • Error handling 错误处理
  • Lazy loading 懒加载
  • Debugging 调试
  • logging, tracing, profiling and monitoring 记录跟踪 优化 校准
  • Performance optimization 性能优化
  • Persistence 持久化
  • Resource pooling 资源池
  • Synchronization 同步
  • Transactions 事务

二, AOP核心概念

1、切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象

2、横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点。

3、连接点(joinpoint):被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器。

4、切入点(pointcut):对连接点进行拦截的定义

5、通知(advice):所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类。

6、目标对象:代理的目标对象

7、织入(weave):将切面应用到目标对象并导致代理对象创建的过程

8、引入(introduction):在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段。参考:https://segmentfault.com/a/1190000007469968

全网最全Spring APO原理 & Spring MVC原理解析_第1张图片

三,AOP两种代理方式

Spring提供了两种方式来生成代理对象: JDKProxy和Cglib,具体使用哪种方式生成由AopProxyFactory根据AdvisedSupport对象的配置来决定。默认的策略是如果目标类是接口,则使用JDK动态代理技术,否则使用Cglib来生成代理。

1.JDK动态接口代理

  1. JDK动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。InvocationHandler是一个接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编制在一起。Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象。

2.CGLib动态代理

CGLib全称为Code Generation Library,是一个强大的高性能,高质量的代码生成类库,可以在运行期扩展Java类与实现Java接口,CGLib封装了asm,可以再运行期动态生成新的class。和JDK动态代理相比较:JDK创建代理有一个限制,就是只能为接口创建代理实例,而对于没有通过接口定义业务方法的类,则可以通过CGLib创建动态代理。

四,实现原理

@Aspect 
public class TransactionDemo { 
      @Pointcut(value="execution(* com.yangxin.core.service.*.*.*(..))") 
    public void point(){  
      }  
      @Before(value="point()") 
     public void before(){ 
         System.out.println("transaction begin"); 
     }  
        @AfterReturning(value = "point()") 
     public void after(){  
         System.out.println("transaction commit"); 
     }  
        @Around("point()") 
     public void around(ProceedingJoinPoint joinPoint) throws Throwable{               
         System.out.println("transaction begin"); 
        joinPoint.proceed();  
        System.out.println("transaction commit");     
      } 
} 

全网最全Spring APO原理 & Spring MVC原理解析_第2张图片

Spring MVC原理

Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。

一,MVC流程

全网最全Spring APO原理 & Spring MVC原理解析_第3张图片
Http请求到DispatcherServlet
(1) 客户端请求提交到DispatcherServlet。

HandlerMapping寻找处理器

(2) 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。

调用处理器Controller
(3) DispatcherServlet将请求提交到Controller。

Controller调用业务逻辑处理后,返回ModelAndView
(4)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。

DispatcherServlet查询ModelAndView
(5处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。

ModelAndView反馈浏览器HTTP
(7) Http响应:视图负责将结果显示到客户端。

二,MVC常用注解

全网最全Spring APO原理 & Spring MVC原理解析_第4张图片

发文预告:
Spring Boot原理
JPA原理
Mybatis缓存
Tomcat构架

大家看到这里可以点个赞 给个评论

你可能感兴趣的:(Spring,java)