`
买切糕的猴子
  • 浏览: 23497 次
社区版块
存档分类
最新评论

Spring架构揭秘-AOP

阅读更多
1、AOP概述
2、Spring AOP原理
3、Spring AOP架构解析
 
一、AOP概述
     Java程序员在写代码的时候通常都是使用新建对象类来描述业务特性,然后通过对象的继承、组合、扩展等手段来实现业务需求,这是典型的面相对象的编程方式即OOP,总的来说OOP是一种由上至下的竖向编程模式。
     在实际的编程中,通常会遇到某些方法里会使用到相同的逻辑,比如记方法执行日志,这些代码在OOP中没法与业务代码完全的解藕,使得方法代码就有了混合逻辑,不符合编程的单一责任原则。如果可以把这块逻辑代码解藕,通把两种逻辑的代码区分开,然后在运行期再合起来就完美了,就相当于在运行期横向的添砖加瓦,也就是面向切面横向的编程即AOP。
二、Spring AOP原理
     实现AOP的主要技术就是动态代理,动态代理的原理这里就不细说了,主要是来看看Spring AOP的实现原理。我们知道通常使用的动态代理技术有JDK的和CGLIB的,其中JDK的动态代理只能代理接口级别,而CGLIB则还可以代理类级别,在Spring中结合了这两者,使得其更灵活。
     在细说Spring AOP原理之前先来看看以下几个重要的概念:
          a、连接点(JoinPoint):程序执行的莫个特定位置,比如类初始化之前,类初始化之后,方法执行之前,方法执行之后,异常抛出之后等等。
          b、切点(PointCut):指定程序执行的位置,每个类对象都有多个JoinPoint,那么到底要在哪个JoinPoint上执行呢?这就需要用PointCut来指定,通常一个PointCut可以对应多个JoinPoint。
          c、增强(Advice):增强就是织入到目标类连接点上的一段程序代码,不少地方叫它通知,笔者觉得叫增强更能表达其含义。Spring 中有BeforeAdvice,AfterAdvice等。其中AOP联盟定义了标准接口Advice,Spring AOP也是基于它进行扩展的。
          d、切面(Aspect):切面是切点和增强的组合,Spring AOP就是切面的实施框架,将切面中定义的增强逻辑实施到切面中指定的连结点中去。
          e、代理(Proxy):一个类被织入增强的代码后就会产生一个代理类,在运行期真正被执行的对象。
 
     下面用图来说一下Spring AOP的原理。
Spring在初始化容器的时候会扫描相关的配置,包括XML、Annotation等,发现有标注了Aspect的Bean后会根据切面中切点定义找到目标类,并且为其织入增强代码并且通过代理生成器生成代理对象,然后供用户使用。
 
三、Spring AOP架构解析
     下面用图来阐述Spring AOP的主要组成部分以及其组件结构,先来看看Spring AOP的组件图
Spring的AOP主要由四大组件构成,分别是切点组件、切面组件、增强组件、代理组件。
根据这四大组件,来看看具体的类图。
 
切点组件类图:
PointCut接口只定义了两个方法,一个是getClassFilter()用于获取过滤器,判别切点能否用于目标类上,另一个则是getMethodMatcher()用于获取方法匹配器,spring提供静态和动态的方法匹配器,除此外还有别的方法匹配器,这里就不列举了,静态方法匹配器仅根据方法签名进行匹配,不关心运行时的参数,只匹配一次,而动态方法匹配器则因为每次方法执行传入的参数可能不一样,所以每次调用方法都需要判断,对性能影响较大。
 
增强组件类图:
AOP联盟定义了AOP的标准,其中一个就是Advice增强接口,各大AOP框架都基于它来进行扩展,其中Spring就在它的基础上扩展了AfterAdvice,BeforeAdvice,DynamicIntroductionAdvice,Inteceptor也是AOP联盟定义的一个接口,用于环绕增强,即在方法执行的前后都织入增强逻辑
 
代理组件类图
在Spring里,当容器初始化时扫描到切面类就会通过ProxyFactory的getProxy()来获取代理对象,然后加入Bean存储器供使用。从上图中可以清晰的看出Spring支持JDK和Cglib两种动态代理方式。
 
切面组件类图
AOP总架构类图
通过最后的总架构类图就很清楚的知道Spring AOP框架的结构以及其个组件之间的组合关系

 

 
  • 大小: 33.6 KB
  • 大小: 45.8 KB
  • 大小: 68.1 KB
  • 大小: 44.7 KB
  • 大小: 29.3 KB
  • 大小: 54 KB
  • 大小: 71.3 KB
0
0
分享到:
评论

相关推荐

    Spring揭秘-配套源码Part23(第23章)

    《Spring揭秘》是一本深入解析Spring框架的权威书籍,作者王福强以其丰富的经验和深入的理解,为我们揭示了Spring的核心机制和使用技巧。本部分为Part23,专注于Spring MVC的实践,结合源码进行深入剖析,帮助读者更...

    spring揭秘 PDF

    Spring Boot还可以与Spring Cloud结合,构建微服务架构,实现服务发现、配置中心、熔断器等功能。 事务管理是企业级应用中不可或缺的部分,Spring提供了声明式事务管理,让开发者能够在不侵入业务逻辑的情况下实现...

    spring揭秘 完整带标签

    8. **Spring Cloud**:在微服务架构中,Spring Cloud提供了一套工具集,用于服务发现、配置中心、负载均衡、熔断器等,帮助开发者构建分布式系统。 9. **Spring Batch**:针对批处理应用,Spring Batch提供了一套...

    spring揭秘pdf版

    《Spring揭秘》这本书深入浅出地探讨了Spring框架的核心特性,包括IoC(Inversion of Control,控制反转)容器、AOP(Aspect Oriented Programming,面向切面编程)以及MVC(Model-View-Controller,模型-视图-控制...

    Spring揭秘.pdf

    在微服务领域,Spring Cloud为基于Spring的应用提供了开发工具,如服务发现、配置中心、负载均衡、熔断器等,极大地推动了微服务架构的实施。 除此之外,Spring Security提供了一套全面的安全解决方案,包括认证和...

    spring揭秘(完整).rar

    《Spring揭秘》是一本深入解析Spring框架的权威指南,它涵盖了Spring的核心概念和技术,旨在帮助开发者全面理解并熟练掌握Spring的使用。Spring是Java企业级应用开发中的一个关键框架,以其模块化、轻量级和强大的...

    Spring揭秘部分1

    Spring框架是Java开发中最广泛应用的轻量级框架之一,它以其强大的功能和灵活...而"Spring揭秘部分2"和"Spring揭秘部分3"则可能进一步探讨Spring的其他模块和高级特性,如Spring Boot、Spring MVC和Spring Security等。

    Spring揭秘

    这部分介绍了Spring框架的基本概念和架构,包括依赖注入(Dependency Injection,DI)的重要性,以及如何使用Spring容器来管理对象的生命周期。同时,会讲解Spring的Bean工厂和ApplicationContext的区别与应用场景。...

    源码级揭秘Spring框架

    Spring框架是Java开发中最常用的轻量级框架之一,它以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)为核心特性,极大地简化了企业级应用的开发工作。源码级揭秘Spring...

    spring揭秘自学用 王福强 高清版

    Spring作为一个轻量级框架,它提倡依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP),以减少企业级应用的复杂性。与传统的EJB(Enterprise JavaBeans)相比,Spring更注重...

    spring揭秘PDF

    2. **AOP(面向切面编程)**:Spring提供了AOP支持,允许开发者定义“切面”,将关注点如日志、事务管理等与业务逻辑分离,实现代码解耦。 3. **容器(IoC Container)**:Spring容器负责创建、配置和管理应用中的...

    王福强 spring解密:很有良心的作者

    2. **AOP(面向切面编程)**:Spring提供了AOP支持,允许开发者定义“切面”,实现代码的模块化,将关注点分离,如日志、事务管理等。 3. **Bean管理**:Spring容器负责创建、初始化、装配以及管理Bean的生命周期。...

    spring揭秘 经典

    ### Spring框架:从困境到辉煌 #### Spring框架的诞生与演变 ...Spring框架的成功不仅改变了Java EE的开发格局,也为整个软件开发行业带来了深远的影响,推动了轻量级框架和微服务架构的发展趋势。

    spring文档整理

    在学习过程中,应重点理解并熟练运用DI和IoC,熟悉Spring的Bean管理、AOP、MVC架构,以及与数据库的交互方式,这些都是Spring的核心知识点。同时,随着Spring框架的不断更新,持续关注最新的文档和指南,保持技术的...

    spring揭密

    《Spring揭秘》是一本深入探讨Java开发中Spring框架核心概念和技术的书籍,旨在帮助程序员全面了解和掌握这一广泛使用的开源框架。Spring以其依赖注入、面向切面编程、事务管理等功能,成为了Java企业级应用开发的...

Global site tag (gtag.js) - Google Analytics