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..*.*(..))") ...
* 总共有六种方式
*
*/
这几个我都写了实例代码,但是感觉还是用语言再组织一下会更清晰。
代码太多了就不贴出来了。请多多指教
/**
* 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..*.*(..))") ...
* 总共有六种方式
*
*/
这几个我都写了实例代码,但是感觉还是用语言再组织一下会更清晰。
代码太多了就不贴出来了。请多多指教
相关文章推荐
- Spring学习总结(三)——Spring实现AOP的多种方式
- Spring学习总结——Spring实现AOP的多种方式
- Spring学习总结——Spring实现AOP的多种方式
- Spring学习总结(三)——Spring实现AOP的多种方式
- Spring学习总结(三)——Spring实现AOP的多种方式
- Spring Aop实现方式总结
- Spring学习总结——Spring实现AOP的多种方式
- Spring学习总结——Spring实现AOP的多种方式
- Spring学习总结——Spring实现AOP的多种方式
- Spring学习总结(三)——Spring实现AOP的多种方式
- Spring学习总结——Spring实现AOP的多种方式
- Spring学习总结——Spring实现AOP的多种方式
- Spring学习总结——Spring实现AOP的多种方式
- Spring学习总结——Spring实现AOP的多种方式
- Spring学习总结——Spring实现AOP的多种方式
- Spring Aop实现方式总结
- Spring aop 的实现方式总结
- Spring 通过Spring AOP 方式来实现AOP
- spring的AOP的四种实现方式
- Spring实现AOP的4种方式