spring5 AOP

1.基本概念

不通过修改源代码的方式增加功能

2.原理

2.1动态代理

1 有接口的方式使用jdk动态代理

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

2 没有接口使用CGlib动态代理  

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

package com.cj.spring5;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JDKProxy{
    public static void main(String[] args) {
        Class[] interfaces = {UserDao.class};
        UserDao userDao = new UserDaoImpl();
        UserDao userDao1 = (UserDao)Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new UserDaoProxy(userDao));
        System.out.println(userDao1.add(1, 2));
    }
}
//创建代理对象代码
class UserDaoProxy implements InvocationHandler{
    private Object obj;
    public UserDaoProxy(Object obj){
        this.obj=obj;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("方法执行之前。。。");

        Object res = method.invoke(obj, args);

        System.out.println("方法执行之后。。。");

        return res;
    }
}

 3 专业术语

1.连接点 所有可以增强的方法

2.切入点 增强的方法

3.通知(增强) 增强逻辑的代码

  前置

  后置

  环绕

  异常

  最终

 

4.切面 把通知应用到切入点过程

4 切入点表达式

1 使用AspectJ实现Aop操作

2 基于AspectJ实现Aop

  1.基于xml

  2.基于注解

3 在项目中引入相关依赖

4 切入点表达式

execution[[权限修饰符][返回类型][类全路径][方法][参数]]

举例:execution[* com.cj.spring.add(..)]

 

posted @ 2022-08-19 23:47  写代码的小哥哥  阅读(19)  评论(0)    收藏  举报