您的位置:首页 > 编程语言 > Java开发

Spring AOP三种配置详细介绍

2015-07-17 19:59 483 查看
AOP框架三足鼎立:

1. AspectJ

2.Jboss AOP

3.Spring AOP



Spring提供4中AOP支持

1.基于代理的经典AOP

2.纯POJO切面(使用XML)

3.@AspcetJ注解驱动的切面

4.注入式AspcetJ切面





我们需要代理的类:



(一)经典aop

通知:advice

日志、数据库连接等这些公共功能的代码 (切面---à多个类的交叉的功能)

Spring中提供:前置通知 环绕通知 后置通知 异常通知 引入通知

(接口)

MethodBeforeAdvice MethodInteceptor AfterReturningAdvice ThrowsAdvice

其中引入通知是通过配置的,实现自定义切入点,和上述四个通知配合使用

以MethodBeforeAdvice为例



通知可以获得代理的方法和对象和参数,可以对它进行相关处理或过滤



代理对象:ProxyFactoryBean 这是Spring框架提供出来的,我们直接使用,并配置相关属性

通过配置 这个代理对象代理一个或多个接口 还有实际代理的目标对象 然后把通知织入代理对象 ,通过配置 将他们关联起来。



使用:取得代理对象,转为被代理类的接口(IApp)即可。所以方法都会被代理



ProxyFactoryBean源码中:

我们刚刚配置的



尽管ProxyFactoryBean中并没有proxyInterfaces这个属性, 但它有setProxyInterfaces()方法,还是会调用这个方法









上述是经典AOP
spring有一套经典AOPProxyFactoryBean笨重复杂
spring3.0新的AOP框架模型 精简易用

(二)XML声明切面
极大简化了spring切面的配置工作,同时也让程序透明化,隐藏了切面的很多细节。

至此上面所有内容都可以作为理解spring配置AOP的基础,是最原始的配置方式,也体现了spring处理的过程

使用ProxyFactoryBean配置有些欠优雅,在spring2.0里新的xml配置元素体现了改进。Spring2.0在aop命名空间里提供了一些配置元素,简化了把类转化为切面的操作。


本质的使用同上,只是简化配置,隐藏细节



完全pojo--->切面






在XML中配置切面aspect为audience(使得audience成为切面)

切点

前置通知 后置通知 after-returning通知 环绕通知 异常通知

不用再配置ProxyFactoryBean

测试成功:






注意:

环绕通知需要使用ProceedingJoinPoint作为入参

通知可以传递参数 可以校验方法的参数值

(三)注解切面

Aspect5引入的关键特性--à@AspcetJ,AspectJ切点表达式

通过注解使Audience类转换为切面



这样就不需要在xml中进行转换了,不过要在spring的上下文中声明一个自动代理Bean

该bean知道如何把@AspcetJ注解的Bean转变成代理通知。



Annotation都需要解析程序才有意义

一般框架里面提供给我们的注解 框架本身会提供解析的程序

配置文件中<aop:aspectj-autoproxy/>是由AspectJAutoProxyBeanDefinitionParser解析

AspectJAutoProxyBeanDefinitionParser不是一个public类 它的接口如下:



查看其继承体系:






[b]AspectJAutoProxyBeanDefinitionParser源码:

[/b]






可以看出它是属于spring框架里面的。也就是说我们只是用了aspect的表达式而已,底层并没有使用aspect的技术

只用了aspcet的注解本身,注解本身是aspectj项目的



(四)注入AspcetJ切面



Spring AOP原理

动态代理 见动态代理文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: