Spring AOP的实现方式总结

最近回头又学习了一下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..*.*(..))") ...
 * 总共有六种方式
 *
 */

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

代码太多了就不贴出来了。请多多指教

























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值