首页 > Web开发 > 详细

【AOP代理】最强王者—AspectJ

时间:2020-05-10 21:45:09      阅读:53      评论:0      收藏:0      [点我收藏+]

前言:

  AOP是目前编程最核心的理念之一,Spring的核心可以用两个专用词汇解析,1、IOC,2、AOP;可见AOP的重要性,Java中的实现方式有几种:

  静态代理

  1. 设计模式例子,手写
  2. AspectJ,编译器织入的方式;

  动态代理

  1. JDK代理
  2. CGLib代理

  以上实现方式网上很多资料,可以参考一些官网api doc;本文简单探讨下几种实现方式的优缺点,结合应用,说下哪个功能最强大

概念:

  Spring中定义有一些代理的概念,切点,切面,连接点,引入增强等:

  // TODO介绍下

设计模式:

 

  设计模式有一章是专门介绍代理模式的,我们可以简单的手写一个代理类,也是我们的入门基础了;

  优点

  完全不依赖框架,可以自己代码自己管理

  缺点

  为了一点的功能可能要写很多代码,有点绕

AspectJ:

  比较高级的,在编译期间就对注解进行解读,把相应逻辑织入切点中,需要特定的编译器

  优点

  因为不需要动态生成类,所以性能好,而且可以直接改变被代理类,被代理类将不复存在;例子:可以在自己new的对象中,注入Spring管理的实例

  缺点

  被代理类不会保留副本,依赖AspectJ编译器;

JDK:

  Java自带的代理实现,属于动态生成字节码类,所以是保存有原来的类的,可能因为严格遵守代理模式,所以只能代理带有接口的类,没有接口不能被代理

  优点

  不依赖框架

  缺点

  无法代理没有接口的类,需要手动获取代理类方法,需要封装一下,最好配合IOC

CGLib:

  也是动态生成字节码,但是是通过继承的方式实现的,所以可以代理没有接口的类

  优点

  可以代理没有接口的类

  缺点

  不能代理final,static,private等方法

 

【AOP代理】最强王者—AspectJ

原文:https://www.cnblogs.com/iCanhua/p/12865178.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!