Spring学习笔记-3章 Srping AOP

AOP的前提知识:

JDK动态代理的缺点:被代理类必须实现接口。

CGLIB代理:不实现接口,直接对java类进行代理。

CGLIB动态代理的实现需要实现MethodInterceptor接口,重写Intercept方法。

        面向切面编程(AOP)是一种编程技术。AOP联盟提供的底层API可以使得各个AOP实现工具之间实现相互兼容。与AOP相关的技术,如通用代理,拦截器,或字节码转换器。

  • AspectJ:一个面向切面的框架,扩展了java语言。

AOP的基本概念:

        AOP(Aspect  Oriented Programming)是OOP(Object Oriented Programming)面向对象编程的一种补充和完善。OOP的面向对象对每个对象的行为进行归纳和划分,实现了抽象。但是,不同对象间的共性却不适合用面向对象编程方式实现,比如学生对象和汽车对象,都需要监控,与自身核心业务逻辑无关,如果用面向对象,就是让学生和汽车对象都集成监控接口,分别实现监控方法,但是不同对象的监控逻辑实现基本相同,都是监控某个时间发生了什么事,只是记录的对象不同,这会导致监控对象行为的逻辑代码散落在系统的各个地方。这样的设计会导致大量重复代码,并且不利于模块复用。

  •      AOP解决这个问题,提供横向切面逻辑,将与多个对象有关的公共模块分装成一个可重用模块,并将这个模块整合成Aspect(切面)。切面就是对与具体业务逻辑无关,却是许多业务模块共同特性或职责的一种抽象,减少了系统中的重复代码,降低了模块的耦合度,更加有利于扩展。          AOP将软件系统分为两部分:核心逻辑和横切逻辑。

 Spring AOP相关概念: 

  •   横切关注点
  • 切面Aspect
  • 连接点JoinPoint:表示一个方法的执行。
  • 切入点Point Cut:是匹配连接点的拦截规则。切入点表达式如何与连接点匹配是AOP的核心。Spring默认使用AspectJ切入点语法。
  • 通知Advice:在切面上拦截到某个特定的连接点之后的工作。
  • 目标对象Target Object:被一个或多个切面所通知的对象,即业务中需要增强的对象。
  • 织入Weaving:是把切面作用到目标对象,然后产生一个代理对象的过程。
  • 引入Introduction:是用来在运行时给一个类声明额外的方法或属性,即不需要为类实现一个接口,就能使用接口中的方法。

Spring AOP的实现:

实现方式:

  • 基于JDK动态代理的实现:两种方式:XML配置文件;注解。
  • 基于CGLIB的动态代理实现

 增强类型:

按照增强(增强就是方法执行)在目标类方法中的连接点位置分为:

前置增强before

后置 after

环绕增强:在目标方法执行前后实施增强。

异常抛出增强:在目标方法抛出异常后实施增强。

引介增强:表示目标类中添加一些新的方法和属性。

切入点类型

切入点是匹配连接点的拦截规则。

Spring实现AOP编程

是以AspectJ相关注解方式实现AOP编程。

AspectJ是一个面向切面的框架,其可以生成遵循Java字节码规范的class文件。

@Aspect注解表示一个切面(实际上就是实现这个的类)

@PointCut注解表示切入点

@Before 前置通知

@Around环绕通知

@AfterReturning 后置通知

@AfterThrowing 异常通知

Spring AOP实现原理

        Spring AOP的实现是通过创建目标对象的代理类,并对目标对象进行拦截来实现。 

、 

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值