当前位置: 首页 > wzjs >正文

北京贸易公司网站制作wordpress用户密码

北京贸易公司网站制作,wordpress用户密码,课程网站建设方案,深圳中企动力一、AOP 是什么 AOP(Aspect Oriented Programming),即面向切面编程,是软件开发中一种重要的编程范式。它通过横向抽取机制,将那些与业务逻辑本身无关、却为业务模块所共同调用的逻辑或责任(如事务处理、日…

一、AOP 是什么

AOP(Aspect Oriented Programming),即面向切面编程,是软件开发中一种重要的编程范式。它通过横向抽取机制,将那些与业务逻辑本身无关、却为业务模块所共同调用的逻辑或责任(如事务处理、日志管理、权限校验等)封装起来,然后通过“动态植入”的方式嵌入到业务逻辑的指定位置,从而实现业务逻辑的隔离与解耦。

AOP 是面向对象编程(OOP)的补充。在 OOP 中,我们通过类和继承来组织代码,但在某些情况下,会遇到一些问题。例如,当需要为多个不具有继承关系的对象添加公共方法时,如日志记录、性能监控等,如果采用 OOP 的方式,就需要在每个对象中都添加相同的方法,这会导致大量的重复代码,增加维护成本。而 AOP 则可以很好地解决这个问题,它将这些公共逻辑抽取出来,集中管理,避免了重复代码的产生。

二、AOP 的优势

  1. 减少重复代码:将公共逻辑集中到切面中,避免了在多个地方重复编写相同的代码。

  2. 提高开发效率:开发者可以专注于业务逻辑的实现,而无需在每个地方都处理那些公共的、与业务逻辑无关的逻辑。

  3. 方便维护:当需要修改公共逻辑时,只需修改切面中的代码,而无需修改每个使用该逻辑的地方。

三、AOP 的技术要点

(一)通知(Advice)

通知定义了“什么时候”和“做什么”。它包含了需要用于多个应用对象的横切行为。根据通知的执行时机,可以分为以下几种类型:

  1. 前置通知(@Before):在目标方法调用之前调用通知。

  2. 后置通知(@After):在目标方法完成之后调用通知。

  3. 环绕通知(@Around):在被通知的方法调用之前和调用之后执行自定义的方法。需要注意的是,目标对象的方法需要手动执行。

  4. 返回通知(@AfterReturning):在目标方法成功执行之后调用通知。

  5. 异常通知(@AfterThrowing):在目标方法抛出异常之后调用通知。

(二)连接点(Join Point)

连接点是程序执行过程中能够应用通知的所有点。在 Spring 中,连接点指的是方法,因为 Spring 只支持方法类型的连接点。

(三)切点(Pointcut)

切点定义了在“什么地方”进行切入,哪些连接点会得到通知。切点表达式用于明确指定方法的返回类型、类名、方法名和参数名等与方法相关的部件。常用的切点表达式格式为:execution([修饰符] 返回值类型 包名.类名.方法名(参数))。其中,修饰符可以省略,返回值类型、包名、类名、方法名和参数都可以使用通配符(*..)来表示。

(四)切面(Aspect)

切面是通知和切点的结合。通知和切点共同定义了切面的全部内容——是什么、何时、何地完成功能。

(五)引入(Introduction)

引入允许我们向现有的类中添加新方法或者属性。

(六)织入(Weaving)

织入是把切面应用到目标对象并创建新的代理对象的过程。织入分为编译期织入、类加载期织入和运行期织入。

四、AOP的底层原理

一、AOP 的底层原理概述

在 Spring 框架中,AOP 的实现依赖于动态代理技术。动态代理技术允许在运行时动态地创建代理对象,并在代理对象上调用方法时插入额外的逻辑(即通知)。Spring AOP 主要使用两种动态代理技术:JDK 动态代理和 CGLIB 代理。

二、JDK 动态代理技术

JDK 动态代理是 Java 提供的一种标准代理机制,它依赖于 Java 的反射机制。JDK 动态代理的核心是 java.lang.reflect.Proxy 类和 InvocationHandler 接口。以下是 JDK 动态代理的实现步骤:

(一)为接口创建代理类的字节码文件

  1. 定义接口:首先,需要定义一个接口,目标对象和代理对象都将实现这个接口。例如:

    public interface UserService {void save();
    }
  2. 实现目标类:目标类实现了上述接口,并提供了具体的业务逻辑。例如:

     
    public class UserServiceImpl implements UserService {@Overridepublic void save() {System.out.println("业务层:保存用户...");}
    }
  3. 创建代理类:通过 java.lang.reflect.Proxy 类动态生成代理类。代理类实现了与目标类相同的接口,并在方法调用时插入额外的逻辑。例如:

    public class MyInvocationHandler implements InvocationHandler {private final Object target;public MyInvocationHandler(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 在目标方法执行前插入逻辑System.out.println("前置通知:记录日志");// 执行目标方法Object result = method.invoke(target, args);// 在目标方法执行后插入逻辑System.out.println("后置通知:记录日志");return result;}
    }
  4. 生成代理实例:通过 Proxy.newProxyInstance 方法动态生成代理实例。例如:

    UserService userService = (UserService) Proxy.newProxyInstance(UserService.class.getClassLoader(), // 目标类的类加载器new Class<?>[]{UserService.class}, // 目标类实现的接口new MyInvocationHandler(new UserServiceImpl()) // 自定义的 InvocationHandler
    );

(二)使用 ClassLoader 将字节码文件加载到 JVM

  1. 类加载器的作用ClassLoader 负责加载字节码文件到 JVM 中。在 JDK 动态代理中,Proxy.newProxyInstance 方法会使用目标类的类加载器来加载生成的代理类。

  2. 动态生成字节码Proxy 类会在运行时动态生成代理类的字节码,并通过类加载器加载到 JVM 中。代理类的字节码是基于目标类实现的接口动态生成的。

(三)创建代理类实例对象,执行对象的目标方法

  1. 代理类实例:通过 Proxy.newProxyInstance 方法生成的代理类实例对象,可以像普通对象一样调用接口方法。

  2. 方法调用:当调用代理类实例的方法时,实际上会调用 InvocationHandlerinvoke 方法。在 invoke 方法中,可以插入前置通知、后置通知等逻辑,并最终调用目标方法。

三、CGLIB 代理技术

CGLIB(Code Generation Library)是一个强大的字节码生成库,它可以在运行时动态生成目标类的子类,并覆盖目标类的方法。CGLIB 代理主要用于那些没有实现接口的类,或者需要代理类的方法而不是接口的方法。

(一)CGLIB 代理的基本原理

  1. 动态生成子类:CGLIB 通过字节码操作库(如 ASM)动态生成目标类的子类。生成的子类继承了目标类,并覆盖了目标类的方法。

  2. 方法拦截:在覆盖的方法中,CGLIB 提供了一个 MethodInterceptor 接口,用于拦截方法调用。在拦截器中,可以插入额外的逻辑,并最终调用目标方法。

(二)CGLIB 代理的实现步骤

  1. 定义目标类:目标类不需要实现接口,例如:

    public class UserServiceImpl {public void save() {System.out.println("业务层:保存用户...");}
    }
  2. 创建拦截器:实现 MethodInterceptor 接口,定义拦截逻辑。例如:

     
    public class MyMethodInterceptor implements MethodInterceptor {@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {// 在目标方法执行前插入逻辑System.out.println("前置通知:记录日志");// 执行目标方法Object result = proxy.invokeSuper(obj, args);// 在目标方法执行后插入逻辑System.out.println("后置通知:记录日志");return result;}
    }
  3. 生成代理实例:通过 Enhancer 类动态生成代理实例。例如:

    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(UserServiceImpl.class); // 设置目标类
    enhancer.setCallback(new MyMethodInterceptor()); // 设置拦截器
    UserServiceImpl userService = (UserServiceImpl) enhancer.create();
  4. 使用代理实例:通过代理实例调用方法时,实际上会调用拦截器的 intercept 方法,在其中插入额外的逻辑,并最终调用目标方法。

四、JDK 动态代理与 CGLIB 代理的比较

表格
特性JDK 动态代理CGLIB 代理
适用场景目标类必须实现接口目标类可以没有接口
代理方式通过接口代理通过生成子类代理
性能相对较好,因为基于接口调用稍差,因为需要生成子类并覆盖方法
灵活性只能代理接口方法可以代理类的方法,更灵活
实现机制基于 Java 反射和 InvocationHandler基于字节码操作库(如 ASM)

文章转载自:

http://3GhZT791.kcxtz.cn
http://hl8gLpA7.kcxtz.cn
http://cxJ8HxU3.kcxtz.cn
http://LFILvRET.kcxtz.cn
http://OMJPS1Qc.kcxtz.cn
http://fc1RV9cT.kcxtz.cn
http://4PuHyVnh.kcxtz.cn
http://RLwH7s6Q.kcxtz.cn
http://d7bQqjDP.kcxtz.cn
http://s5pA87Cr.kcxtz.cn
http://d8knCAQU.kcxtz.cn
http://TISicbHW.kcxtz.cn
http://97Aqffvb.kcxtz.cn
http://uTuO9Uet.kcxtz.cn
http://ZcjefSl0.kcxtz.cn
http://KSE6dxed.kcxtz.cn
http://R318Ohqc.kcxtz.cn
http://d5P0fNBp.kcxtz.cn
http://CxDiUNlF.kcxtz.cn
http://2RoXHodh.kcxtz.cn
http://1OY6d25E.kcxtz.cn
http://xo0fnnmg.kcxtz.cn
http://3ZcAFApT.kcxtz.cn
http://5NkHPiBl.kcxtz.cn
http://P2Wth8Di.kcxtz.cn
http://CR4OSBmd.kcxtz.cn
http://YGE3a2CQ.kcxtz.cn
http://UEpjYhgi.kcxtz.cn
http://2j7TTpSh.kcxtz.cn
http://Cr1lKVpQ.kcxtz.cn
http://www.dtcms.com/wzjs/618388.html

相关文章:

  • 河北省建设中心网站奥运网站模板
  • 人社局网站建设管理工作总结wordpress主题搭建
  • 西宁网络信息 网站建设建设银行网站怎么不可登入
  • 天津制作企业网站报价中国空间站视频
  • 共享办公wework萧山区seo关键词排名
  • 禅城建网站官方网站建设合作协议
  • 怎样购买网站程序中企动力做网站多少钱
  • 机关局域网网站建设wordpress如何添加首页
  • 网站运营适合什么样的人做seo案例分享
  • 做易拉宝的网站yum安装wordpress
  • 上海泵阀网站建设大学毕业做网站插画师好吗
  • 网站建设单页面推广模板ps做游戏下载网站
  • 做vip电影网站网站没有排名
  • 宣城网站seo国外设计公司名字
  • 成都手机网站建设报价表沧州网站推广优化
  • 手机网站一年费用吗wordpress 4.1分页
  • 西安网站推广公司电话维度 网站建设
  • 网站开发建设价格附件网站建设壹金手指六六1
  • 建设工程信息化考试报名网站网站建设与维护培训
  • 网站颜色配色wordpress取消邮件
  • 婚纱网站策划书最简单仓库管理软件
  • 杭州网站建设提供商电子商务网站规划方案
  • 做视频网站 带宽多少才合适公众号怎么制作小程序
  • 广州网站开发工程师赛门仕博做网站怎么样
  • 免费网站推广网站破解版网站开发制作软件
  • 网站做反向代理后样式加载错误网站广告如何做
  • 做网站写代码怎么样做网站准备的资料
  • 超链接到网站怎么做视频文件下载佛山市建网站做网站费用
  • 教育行业网站推广渠道分析
  • 深圳市中农网是专业农产品营销网站筹划建设智慧海洋门户网站