AOP面向切面编程

本文介绍了面向切面编程(AOP)的概念,探讨了Spring AOP如何利用JDK动态代理和CGLIB实现。通过详细讲解JDK动态代理的Proxy类和InvocationHandler接口,展示了如何编写动态代理代码。同时,文章讨论了AOP的核心术语,包括连接点、切入点、通知和切面,并提供了切入点表达式的实例。此外,还介绍了基于AspectJ注解的AOP操作,包括创建切面、配置通知和设置增强类优先级。最后,文章提及了完全使用注解开发AOP和AspectJ配置文件的了解。
摘要由CSDN通过智能技术生成


AOP的概念:

  1. 面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
  2. 通俗描述:不通过修改源代码方式,在主干功能里面添加新功能

在这里插入图片描述

底层原理

AOP 底层使用动态代理

第一种 有接口情况,使用 JDK 动态代理

  • 创建接口实现类代理对象,增强类的方法

在这里插入图片描述
第二种 没有接口情况,使用 CGLIB 动态代理

  • 创建子类的代理对象,增强类的方法

在这里插入图片描述

增加新功能原始方式是写一个它的子类然后继承该功能方法,在重写的方法里增加新功能的代码,CGLIB代理便是创建一个当前类子类的代理对象来完成相关的逻辑

JDK 动态代理

Proxy 类

  • java.lang.reflect.Proxy
  • newProxyInstance 方法

在这里插入图片描述
方法有三个参数:

  • 第一参数,类加载器,一般调用当前类的加载器即可

    • JDKProxy.class.getClassLoader()
      
  • 第二参数,增强方法所在的类,这个类实现的接口,支持多个接口,用数组来封装,写法如下:

    • new Class[]{
             UserDao.class}
      
  • 第三参数,实现这个接口 InvocationHandler,创建代理对象,写增强的部分

    • new UserDaoProxy()
      
    • new InvocationHandler() {
             
          @Override
          public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
             
              return null;
          }
      });
      

      这里可以写实现类InvocationHandler()接口的类,也可以直接用匿名实现类来完成操作

编写 JDK 动态代理代码

(1)创建接口,定义方法

public interface UserDao {
   
    public int add(int a,int b);
    public String update(String str);
}

(2)创建接口实现类,实现方法

public class UserDaoImpl implements UserDao {
   
    @Override
    public int add(int a, int b) {
   
        System.out.println("UserDao add()方法");
        return a + b - 1;
    }

    @Override
    public String update(String str) {
   
        System.out.println("UserDao update()方法");
        return str
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值