Spring中AOP的几个概念

一、面向切面编程提供了另外一种角度来思考程序结构,通过这种方式来弥补面向对象(OOP)的不足。除了classes(类)以外,AOP提供了切面!切面对关注点进行模块化,例如横切多个类型和对象的事物管理。这个关注点术语通常称作横切关注点。

AOP是Spring框架的另一个重要特征。AOP把一个业务流程分成几个部分,例如权限检查、业务处理、日志记录,每个部分单独处理,然后把他们组装成完整的业务流程。每个部分都被称为切面(Aspect)或者关注点。

Spring的一个关键组件就是AOP框架,尽管Spring IOC 不依赖于AOP,这意味着你可以自由选择是否使用AOP,AOP提供强大的中间件解决方案,这使得Spring IOC容器更加完美!

Spring中使用的AOP:允许用户自定义切面,用AOP来完善OOP的使用。

1.切面(aspect):一个关注点的模块化,这个关注点可能会横切多个对象。切面(用@Aspect注解的类)和其他类一样有方法和字段定义。他们可能包含切入点、通知和引用申明。

Spring2.0引入一种更加简单也更加强大的方式来自定义切面,用户可以选择使用基于模式(schema-based)的方式或者使用@AspectJ注释!这两种风格都完全支持通知(Advice)类型和AspectJ的切入点语言!

下面是application context中一个常见的bean定义,这个bean指向一个使用了@Aspect注解的bean类

 <bean id="myaspect" class="org.xyz..MyAspect "  >

</bean>

下面是MyAspect类定义,使用了org.aspectj.lang.annotation.Aspect注解。

package AOP.org.xyz;

import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class MyAspect {

}


申明一个切面,有了schema的支持,切面就和常规的Java对象一样被定义成application context中的一个bean.

<aop:config>

    <aop:aspect id="myAspect"   ref="aBean">

</aop:config>

<bean id="aBean" calss="AOP.org.xyz.MyAspect" />

</bean>

2.切入点(Pointcut):匹配连接点的断言,通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如执行某个特定名称和方法是)。

 切入点决定了连接点的关注内容(是连接点的集合),使得我们可以控制关注点什么时候执行。Spring AOP只支持Spring bean 方法执行连接点。所以你可以把切入点看做是匹配Spring bean上方法的执行。

一个切入点声明有两个部分:一个包含名字和任意参数的签名,还有一个切入点表达式,该表达式决定了我们关注那个方法的执行。

@Pointcut("execution(*transfer(..))")    //切入点表达式

private void  anyOldTransfer(){             //切入点签名

}

这个切入点将匹配任何名为transfer的方法执行。


切入点制定者的支持   Spring   AOP支持在切入点表达式中使用如下的AspectJ切入点制定者

  -executon-匹配方法执行的连接点,这是你将用到Spring的最主要的切入点指定者。

  -within-限定匹配特定类型的连接点

  -this-限定匹配特定的连接点,其中 bean reference(Spring AOP代理)是指定类型的实例。

  -target-限定匹配特定的连接点,其中目标对象(被代理的application object)是指定类型的实例。

Spring AOP限定了连接点必须是方法执行级别的,pointcut  designators的讨论中也给出了一个定义,这个定义和AspectJ编程指南中定义的相比更加狭窄。

Spring AOP是一个基于代理的系统,并且严格区分代理对象本身(对应于this)和背后的目标对象(对应于target).


合并切入点表达式:切入点表达式可以通过:‘&&’、‘||’、‘!’来合并,还可以通过名字来指向切入点表达式。

以下例子展示了三个切入点表达式:anyPublicOperation(在一个方法执行连接点代表了任意public方法的执行匹配),isTrading(在一个代表了在交易模块中的任意方法执行时匹配)和tradingOperation(在一个代表了交易模块中任意公共方法执行是匹配)。


就上所示,从更小的命名组件来构建更加复杂的切入点表达式是一种最佳实践。当用名字来指定切入点时使用的是常见的Java成员可视性访问规则。


共享常见的切入点定义:在开发企业级应用的时候,你通常想要从几个切面来参考模块化的应用和特定操作的集合。我们推荐定义一个切面来捕捉常见的切入点表达式,一个典型的切面看起来像下面这样。



 示例中的切入点定义了一个你可以在任何需要切入点的表达式的地方可引用的切面。  比如可以时使service层事务化。



3.连接点(Joinpoint)在程序执行过程中某个特定的点,比如是方法调用的时候或者异常处理的时候。在Spring AOP中一个连接点总是代表一个方法的执行。通过声明org.aspect.lang.JoinPoint类型的参数可以通知的主体部分获得连接点信息。。

4.通知(Advice):在切面的某个特定的连接点(joinpoint)上执行的动作,通知有各种类型,其中包括“aound”,"before“,"after"等通知。

       Spring的AOP以拦截器做通知的模型,执行是并维护一个以连接点为中心的拦截器栈。

@Before("fooException()")、@AfterReturning("fooException()")

5.引入(Introduction)(也被称为内部类型声明):声明额外的方法或者某个类型的字段,Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。

     引入使得一个切面可以定义被通知对象实现一个给定的接口,并且可以代表那些对象提供具体实现。

6.目标对象(Target Object):被一个或多个切面所通知(advice)的对象,也可以叫被通知对象。既然Spring AOP是通过运行时代理实现的。这个对象永远是一个被代理的对象。

7.AOP代理(AOP Proxy):AOP框架创建的对象,来实现切面契约(包括通知方法执行等功能)。

   在Spring 中,AOP代理可以是JDK动态代理或者CGLIB代理。

8.织入(Weaving):把切面连接到其他的应用程序或者对象上,并创建一个被通知的对象。这些可在编译时、类加载时和运行时完成。Spring和其他JAVA AOP一样在运行时织入。

二、Spring中AOP的两种配置方式。

  1.基于配置文件的配置方式。

    创建一个JAVA文件,并指定一个用于执行拦截的方法,该方法可以有0个或者多个参数,在Spring配置文件中配置该类为一个Bean.

    使用<aop:config>以及<aop:aspect>、<aop:adviser>进行配置。

  2.基于@AspectJ标签的配置方式。

   1.在配置文件中加<aop:aspectj-autoproxy/>注解。

   2.创建一个JAVA文件,使用@Aspect注解修饰该类。

   3.创建一个方法,使用@Before,@After,@Around等进行修饰,在注解中写入切入点的表达式。

     上述JAVA类创建好之后需要在Spring容器中进行声明。可以在配置文件中定义<bean:/>节点,也可以使用@Component组件进行装饰。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要组件,它是一种编程范式,用于将横切关注点(Cross-Cutting Concerns)与核心业务逻辑进行分离。横切关注点是指那些与业务逻辑无关,但是对多个模块或层产生影响的代码,例如日志记录、性能统计、安全控制、事务处理等等。通过将这些横切关注点抽象成切面(Aspect),并将切面织入到应用程序,可以实现对这些横切关注点的统一处理,从而提高应用程序的可维护性和可扩展性,减少重复代码的编写。 Spring AOP框架主要由以下几个概念组成: 1. 切面(Aspect):由切点和通知组成的一个模块,用于实现一个或多个横切关注点。 2. 切点(Pointcut):用于定义在哪些方法上进行拦截。 3. 通知(Advice):定义了拦截后要执行的操作,包括前置通知、后置通知、返回通知、异常通知和环绕通知等。 4. 连接点(Join Point):在应用程序可以被拦截的点,例如方法调用、异常抛出等。 5. 切入点(Join Point):指定连接点的一组集合,用于定义切点。 6. 织入(Weaving):将切面应用到目标对象并创建新的代理对象的过程。 Spring AOP框架的实现方式主要是通过动态代理技术和字节码增强技术。在使用Spring AOP框架时,开发人员只需要定义切面、切点和通知,框架会自动将切面织入到应用程序,从而实现对横切关注点的统一处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值