AOP介绍

一、什么是AOP?

AOP(Action oriented programming),面向切面编程,它的作用是可以让我们“专心做事”,专心处理业务逻辑代码。不用关心:日志记录、事务控制及权限控制等。

1、使用 spring的 aop可以解决两个问题

问题一:Java EE程序员在编写具体的业务逻辑处理方法时,只需关心核心的业务逻辑处理,既提高了工作效率,又使代码变更简洁优雅。
问题二:在日后的维护中由于业务逻辑代码与其它共有代码分开存放,而且共有代码是集中存放,从而使维护工作变得简单轻松。

2、AOP中关键性概念

2.1:切面-【Aspect】

切面其实就是共有功能的实现,如日志切面、权限切面、事务切面等。在实际应用中通常是一个存放共有功能实现的普通 Java类,之所以能被AOP容器识别成切面,是在配置中指定的。

2.2:通知-【Advice】

通知又名拦截器,它的意思是在某个特定的连接点上执行的动作,它是切面的具体实现。以目标方法为参照点,根据放置的地方不同,通知分为如下几种:

  • 前置通知-Before,实现MethodBeforeAdvice接口。     ===》目标方法调用之前执行;
  • 后置通知-After,实现AfterReturningAdvice接口。        ===》目标方法调用之后执行;
  • 返回通知-After-returning。                ===》目标方法执行成功之后执行;
  • 异常通知-After-throwing。                ===》目标方法抛出异常后执行;
  • 环绕通知-Around,实现MethodInterceptor接口。    ===》目标方法执行前后都会执行,相等于合并了前置和后置通知。

2.3:连接点-【Joinpoint】

程序在运行过程中能够插入切面的地点。例如,方法调用、异常抛出或返回值等,Spring只支持方法级的连接点。

2.4:切入点-【Pointcut】

多个连接点的集合,用于定义通知应该切入到哪些连接点上。不同的通知通常需要切入到不同的连接点上,这种精准的匹配是由切入点的正则表达式来定义的。

2.5:目标对象-【Target】

即将切入切面的对象,也就是那些被通知的对象。这些对象中已经只剩下干干净净的核心业务逻辑代码了(其实就是只有业务逻辑代码的java类),所有的共有功能代码等待AOP容器的切入。

2.6:代理对象-【Proxy】

将通知应用到目标对象之后被动态创建的对象。代理=目标+通知,注意:只有代理对象才有AOP功能,而AOP的代码是写在通知的方法里面的。

2.7:织入-【Weaving】

将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期,当然不同的发生点有着不同的前提条件。譬如发生在编译期的话,就要求有一个支持这种AOP实现的特殊编译器;发生在类装载期,就要求有一个支持AOP实现的特殊类装载器;只有发生在运行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。

2.8:适配器-【Advisor】

适配器=通知(Advice)+切入点(Pointcut),Java中的适配器就是可以把一种接口转换成另一种接口的对象,Spring AOP 模块对 BeforeAdvice、 AfterAdvice、 ThrowsAdvice 三种通知类型的支持实际上是借助适配器模式来实现的。


二、工具类-ProxyFactoryBean介绍

在实现AOP功能的时候需要借助工具类-org.springframework.aop.framework.ProxyFactoryBean,它的主要作用是用来创建代理对象。有以下三个属性:

  1. target:代理对象要代理的目标类,这个目标类实现了 proxyInterfaces属性指定的接口。在接下来要演示的案例中,实现类 BookBizImpl就是要代理的目标类;
  2. proxyInterfaces:代理对象要实现的接口列表,是一个List集合。在接下来要演示的案例中,代理对象要实现的接口就是 IBookBiz。其实代理对象要实现的接口和被代理对象(也就是目标类)要实现接口是一样的,因为代理对象要代理目标类,所以要实现目标类所实现的接
  3. interceptorNames:通知,又名拦截器。interceptorNames是存放拦截器的容器。指明要在代理的目标类中添加的通知(前置通知、后置通知等),是一个List集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值