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

文章目录

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

JKD的动态代理

  • 新建项目
    AOP的底层实现—之JKD的动态代理——(七)_第1张图片
  • 项目结构
    AOP的底层实现—之JKD的动态代理——(七)_第2张图片

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.输出结果

AOP的底层实现—之JKD的动态代理——(七)_第3张图片

你可能感兴趣的:(Java框架,aop,proxy,spring,java,junit)