2025-08-17 【Java】 Spring框架中AOP底层原理(JDK动态代理)

AOP

AOP(Aspect Oriented Programming)即面向切面编程 AOP的主要作用在于对各个业务逻辑的部分进行了各类,从而达到了解耦的效果,用更加通俗的话说,使用AOP可以通过不修改源代码的方式往原先的业务主干中添加新的功能。

AOP的底层实现

AOP的底层实现使用了Java中的动态代理技术,其可以细分为两类当被代理对象有接口的时候,使用JDK动态代理,当被代理对象没有接口的时候使用CGLIB动态代理,在Spring框架的实际使用中进行动态代理的部分已经被封装好,直接通过注解的方式使用即可。

JDK动态代理的原生编写和测试

JDK动态代理需要使用Proxy类进行创建代理对象
1.newProxyInstance方法

2025-08-17 【Java】 Spring框架中AOP底层原理(JDK动态代理)

三个参数分别对应 代理类的类加载器,被增强方法所在的类实现的接口(可包括多个接口),InvocationHandler接口的实现(用于进行增强部分的编写)
**2.原生JDK动态代理代码
先创建示例接口UserDAO

public interface UserDAO {
    public void add();
}

创建示例接口的实现类

public class userDAOImpl implements UserDAO{
    @Override
    public void add() {
        System.out.println("方法执行了");
    }
}

使用Proxy类创建代理对象,InvocationHandler接口的实现这里采用单独新建一个类 使用匿名内部类来完成也可

public class JDKProxy {
    public static void main(String[] args) {
        //创建实现类接口的代理对象
        Class[] interfaces = {UserDAO.class};
        //新建被代理类的对象
        UserDAO userDAO = new userDAOImpl();
        //得到动态代理的对象
        UserDAO o = (UserDAO)Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new UserDAOProxy(userDAO));
        o.add();
    }
}
class UserDAOProxy implements InvocationHandler{
    private Object object;
    //构造方法 通过传入的对象进行动态的创建相应的代理对象
    public UserDAOProxy(Object object) {
        this.object = object;
    }
  //增强方法的逻辑
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("方法执行前" + method.getName());

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


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

        return res;

    }
}

3.测试结果

2025-08-17 【Java】 Spring框架中AOP底层原理(JDK动态代理)

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
我差点兔了的头像 - 宋马
评论 抢沙发

请登录后发表评论

    暂无评论内容