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

Spring AOP的实现方式总结

2014-11-28 00:32 357 查看
最近回头又学习了一下Spring, 在这里总结一下AOP的几种实现方式:

/**

* Spring Aop总结

* 一. 可以实现的方式

* 1. JDK、Proxy 动态代理

* A. 这个比较基础使用proxy直接对方法增强, 前提是增强类需要有接口。

* 2. Cglib enhance 字节码增强

* A. 使用核心类Enhancer.setSuperclass(代理类)

* B. enhancer.setCallback(new MethodInterceptor(){ 里面实现方法,类似JDK动态代理})

* C. enhancer.create(); 生成代理类

* 3. ProxyFactoryBean Spring代理工厂

* A. 同样需要有自定义的通知类Advice, 并且该Advice需要实现MethodInterceptor接口

* B. 使用Spring提供的ProxyFactoryBean工厂生成代理对象,在生成代理对象之前该工厂需要以下参数信息

* a. 代理类实现的接口: property name="interfaces" value="...UserDao"

* b. 代理目标: property name="target" ref="...userDaoImpl"

* c. 通知增强目标: property name="interceptorNames" value="自定义的通知"

* 值得注意的是这个地方引用上面自己定义实现了MethodInterceptor接口的通知类,但是引用使用的是VALUE 而不是 Ref

* d. 生成代理的方式 property name="proxyTragetClass" value="true"

* 这里值得说明的是: 如果设置成 true Spring采用cglib的方式代理/ 如果设置成false Spring采用jdk.Proxy动态代理方式

* 4. AspectJ规范, 传统的AOP配置

* A. 使用aop标签配置<aop:config>, 其中需要配置两点。一是配置切入点PointCut, 一是配置一个特殊的切面<只有一个切入点和一个通知>Advisor

* 值得说明的是:

* a. PointCut切入点, 具体的切入点是通过expression表达式匹配的。

* expression="execution(* com.xh.traditional..*.*(..))"

* b. 特殊的切面<aop:advisor advice-ref="自定义实现了MethodInteceptor接口的通知" pointcut-ref="a中定义的切入点">

* 特殊切面的特殊之处在于: 该切面只有一个切入点和一个通知

* 5. AspectJ框架

* A. XML配置方式

* 这种方式相对较好以下, 因为这种方式的通知类不需要实现MethodInteceptor接口。只需要进行切面编程就哦了。如下

* a. 使用<aop:config>配置, 依旧使用aspect规范

* b. <aop:aspect ref="自定义的通知"> 其中可以配置

* 切入点<aop:pointcut expression="xxx">

* 前置切面 <aop:before method="" pointcut-ref="上面的切入点" />

* ...

* c. 后置切面 after-returning 可以带有返回值

* B. Annotation注解方式

* 注解的方式就比较牛叉了。 在spring核心配置文件中只需要配置两点, 如下

* a. 配置注解扫描package, 这个你不配值的话Spring什么注解都不会好用的.<context:component-sacn base-packeage="com.xh"/>

* b. 开启切面自动代理。<aop:aspectj-autoproxy/>

* c. 注解配置, 只需要配置在通知类上: @Before("execution(* com.xh..*.*(..))") ...

* 总共有六种方式

*

*/

这几个我都写了实例代码,但是感觉还是用语言再组织一下会更清晰。

代码太多了就不贴出来了。请多多指教
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: