`
youyu4
  • 浏览: 435911 次
社区版块
存档分类
最新评论

Spring AOP 之概念

 
阅读更多

Spring AOP 之概念

 

为什么使用AOP?

 

      1. 节省代码,加了切面统一完成特定操作,不用每个类都去写

      2. 为了机构更清晰,代码集中在的业务上,其他事情(安全、事务、日志)让切面完成

 

 

 

实现AOP的技术,主要分为两大类:

 

      1. 采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;

      2. 采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

 

 

 

AOP使用场景

 

      Authentication 权限

      Caching 缓存

      Context passing 内容传递

      Error handling 错误处理

      Lazy loading 懒加载

      Debugging  调试

      logging, tracing, profiling and monitoring 记录跟踪 优化 校准

      Performance optimization 性能优化

      Persistence  持久化

      Resource pooling 资源池

      Synchronization 同步

      Transactions 事务

 

      1. 性能监控:在方法调用前后记录调用时间,方法执行太长或超时报警。

      2. 缓存代理:缓存某方法的返回值,下次执行该方法时,直接从缓存里获取。

      3. 软件破解:使用AOP修改软件的验证类的判断逻辑。

      4. 工作流系统:工作流系统需要将业务代码和流程引擎代码混合在一起执行,可以使用AOP将其分离,并动态挂接业务。

      5. 权限验证:方法执行前验证是否有权限执行当前方法。

      6. 方法调用成功后——>统计调用次数——>存入缓存服务器——>每日存入数据库

         因为每天的方法调用次数近百万,为了降低数据库压力不能实时入库。

      7. 事务:在监控的方法前后加环绕通知,前通知负责记录SQL,后通知负责提交事务或回滚。

 



 

 

spring的术语

 

Advice(通知)

在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。Spring中定义了四个advice: BeforeAdvice, AfterAdvice, ThrowAdvice和DynamicIntroductionAdvice

 

Aspect(切面)

是个类,类里写了想要横切进去的逻辑。

 

JoinPoint(连接点)

可以在系统中织入横切逻辑的位置

 

PointCut(切入点)

是表达式,用来描述系统中所有需要织入横切逻辑的 Joinpoint 的集合 

 

introduction(引入)

允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗

 

Target Object(目标对象)

被一个或多个切面所通知的对象。Spring AOP通过运行时代理实现,因此,这个对象永远是一个被代理对象。

 

AOP Proxy(AOP代理)

AOP框架创建的对象,用来实现你想要的切入功能。Spring中,AOP代理是JDK动态代理或者CGLIB代理。

 

Weave(织入)

把切面连接到其他的应用程序类型或者对象上,并创建一个被通知对象。织入可以在编译时,类加载时和运行时完成,Spring是在运行时完成的。

 



 

 

开发中与代码有关的就是

   1. 切面

   2. 通知

   3. 切入点

 

 

 

各种通知(Advice)类型

 

Before advice:在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。

ApplicationContext中在<aop:aspect>里面使用<aop:before>元素进行声明。

 

After advice:当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。

ApplicationContext中在<aop:aspect>里面使用<aop:after>元素进行声明。

 

After returnadvice:在某连接点正常完成后执行的通知,不包括抛出异常的情况。

ApplicationContext中在<aop:aspect>里面使用<aop:after-returning>元素进行声明。

 

Around advice:包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。

ApplicationContext中在<aop:aspect>里面使用<aop:around>元素进行声明。

 

Afterthrowing advice:在方法抛出异常退出时执行的通知。

 

ApplicationContext中在<aop:aspect>里面使用<aop:after-throwing>元素进行声明。

 



 

 

 

AOP 2种代理的区别

 

      1. JDK基于接口实现:JDK动态代理对实现了接口的类进行代理。

 

      2. CGLIB基于继承:CGLIB代理可以对类代理,主要对指定的类生成一个子类,因为是继承,所以目标类最好不要使用final声明。 

       

      通常情况下,鼓励使用jdk代理,因为业务一般都会抽象出一个接口,而且不用引入新的东西。如果是遗留的系统,以前没有实现接口,那么只能使用CGLIB。

 

 

 

参考:

http://www.myexception.cn/software-architecture-design/925289.html

http://www.th7.cn/Program/java/2012/03/03/62048.shtml 

http://blog.csdn.net/moreevan/article/details/11977115/

http://blog.csdn.net/dreamthen/article/details/26687727

http://blog.csdn.net/xiaoxian8023/article/details/17225339

  • 大小: 150.4 KB
  • 大小: 77.5 KB
  • 大小: 37.8 KB
分享到:
评论

相关推荐

    Spring AOP面向方面编程原理:AOP概念

    ### Spring AOP面向方面编程原理:AOP概念详解 #### 一、引言 随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程...

    spring aop jar 包

    在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录、事务管理、性能监控等。在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知...

    简单spring aop 例子

    首先,我们要理解AOP的核心概念。AOP是一种编程范式,它允许开发者定义“切面”(Aspects),这些切面封装了特定的关注点,如日志、性能监控等。在运行时,这些关注点被编织到应用程序的主业务逻辑中,使得代码更...

    Spring AOP完整例子

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    在深入理解 Spring AOP 的源码时,需要熟悉 Spring IoC 的工作原理,以及 AOP 相关的概念,如切点表达式、通知类型等。了解这些基础知识可以帮助我们更好地掌握 Spring AOP 的实现细节。在分析源码时,可以参考作者...

    spring aop依赖jar包

    现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...

    Spring AOP实现机制

    AOP概念 - **切面(Aspect)**:切面是关注点的模块化,通常包括业务逻辑与横切关注点,如日志、安全检查等。 - **通知(Advice)**:通知是切面在特定连接点上执行的行为,如方法调用前、后、异常时等。 - **连接...

    spring aop 五个依赖jar

    它包含了一些基本的AOP概念,如Advisor、Pointcut和Proxy等,是连接不同AOP实现的桥梁。 这些库的组合使得Spring AOP能够有效地工作。使用Spring AOP,开发者可以定义切面,声明切入点(即关注点的定位),编写通知...

    spring aop的demo

    在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...

    SPRING_AOP_概念解析以及例子示范.docx

    AOP的核心概念包括: 1. **通知(Advice)**:通知定义了切面在何时何地执行。在Spring中,有五种不同类型的Advice:`Before`(前置通知)、`After-Returning`(返回后通知)、`After-Throwing`(异常后通知)、`...

    Spring AOP 概念理解及@AspectJ支持

    **Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过...理解和熟练运用Spring AOP及其@AspectJ注解是每个Spring开发者必备的技能之一。

    spring AOP 引入jar包,spring IOC 引入Jar包

    1. **概念理解**:AOP 是一种编程范式,它将关注点分离,让通用的横切关注点(如日志、事务管理)与业务逻辑解耦。在 Spring 中,切面可以通过注解或 XML 配置定义。 2. **通知类型**:包括前置通知(Before)、...

    spring-aop实例

    通过以上介绍,我们可以看到Spring AOP的强大之处在于它简化了代码的组织和维护,使得横切关注点的实现更加优雅。了解并掌握这些概念,开发者可以有效地利用Spring AOP提升应用程序的可维护性和可扩展性。

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    Spring框架中的AOP模块使用了动态代理来实现AOP概念。Spring AOP允许开发者定义切面,并在这些切面中指定拦截的方法。Spring AOP支持不同的代理策略,包括JDK动态代理和CGLIB代理。如果被代理的类没有实现接口,...

    springAop的配置实现

    Spring AOP 基础概念** - **切面(Aspect)**:切面是关注点的模块化,比如日志、事务管理等,这些关注点可以被定义为一个独立的模块,称为切面。 - **通知(Advice)**:在特定连接点上执行的代码,也就是切面要...

    spring aop 学习笔记

    本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...

    小马哥讲 Spring AOP 编程思想 - API 线索图.pdf

    在讨论Spring AOP(面向切面编程)时,首先需要理解几个核心概念。Spring AOP 是Spring框架提供的一个功能模块,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中解耦出来,通过在方法调用前后进行...

    spring-aop-jar

    "spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨Spring AOP、相关jar文件以及它们在实际开发中的作用。 首先,我们来看一下提供的文件: 1. aopalliance.jar:这是一...

    spring AOP入门教程

    - **SpringAOP.avi**:可能是一个视频教程,详细讲解了Spring AOP的概念和实践。 - **SpringAOP.doc**:可能是文档教程,包含了详细的步骤和示例代码。 - **SpringAOP_src.rar**:源代码示例,供你参考和实践。 - **...

    spring aop spring aop

    在Spring AOP中,主要有以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,包含pointcut(切点)和advice(通知)两部分。例如,在上述代码中的`PersonProxy`类就是一个切面,它定义了`before()`和...

Global site tag (gtag.js) - Google Analytics