AOP的底层实现—之JKD的动态代理——(七)

    技术2023-11-19  94

    文章目录

    JKD的动态代理1.在src/main下创建Java源文件,创建包com.aop.demo12.在pom.xml内引入依赖3.创建UserDao接口4.创建UserDaoImpl接口5.创建SpringDemo1测试类6.创建MyJdkProxy类实现JKD动态代理7.输出结果

    JKD的动态代理

    新建项目 项目结构

    1.在src/main下创建Java源文件,创建包com.aop.demo1

    2.在pom.xml内引入依赖

    <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency>

    3.创建UserDao接口

    package com.aop.demo1; public interface UserDao { public void save(); public void upsate(); public void delete(); public void find(); }

    4.创建UserDaoImpl接口

    package com.aop.demo1; public class UserDaoImpl implements UserDao{ public void save() { System.out.println("保存用户···"); } public void upsate() { System.out.println("修改用户···"); } public void delete() { System.out.println("删除用户···"); } public void find() { System.out.println("查询用户···"); } }

    5.创建SpringDemo1测试类

    package com.aop.demo1; import org.junit.jupiter.api.Test; public class SpringDemo1 { @Test public void demo1(){ UserDao userDao = new UserDaoImpl(); // 原来的方法 // userDao.save(); // userDao.upsate(); // userDao.delete(); // userDao.find(); UserDao proxy = (UserDao) new MyJdkProxy(userDao).createProxy(); proxy.save(); proxy.upsate(); proxy.delete(); proxy.find(); } }

    6.创建MyJdkProxy类实现JKD动态代理

    package com.aop.demo1; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class MyJdkProxy implements InvocationHandler { private UserDao userDao; public MyJdkProxy(UserDao userDao) { this.userDao = userDao; } public Object createProxy(){ Object proxy = Proxy.newProxyInstance(userDao.getClass().getClassLoader(),userDao.getClass().getInterfaces(),this); return proxy; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if ("save".equals(method.getName())){ System.out.println("权限校验"); return method.invoke(userDao,args); } return method.invoke(userDao,args); } }

    7.输出结果

    Processed: 0.022, SQL: 9