zoukankan      html  css  js  c++  java
  • jdk动态代理

    jdk动态代理就是采用反射技术实现的

    jdk动态代理前提条件是:被代理对象必须实现一个或者多个接口

    jdk动态代理需要实现InvocationHandler接口和invoke()方法

    例如:

    接口userDao

    public interface userDao {
    public void addUser();
    public void deleteUser();
    }

    接口实现类UserDaoImp
    public class UserDaoImp implements userDao {
    @Override
    public void addUser() {
    System.out.println("添加用户");
    }

    @Override
    public void deleteUser() {
    System.out.println("删除用户");

    }
    }
    切面类Myaspect
    //切面类,用于增强
    public class Myaspect {
    public void addBefore(){
    System.out.println("添加之前的检查");
    }
    public void deleteBefore(){
    System.out.println("删除之前的检查");
    }

    }

    jdkProxy代理类
    public class jdkProxy implements InvocationHandler {

    //jdk动态代理的:要先建立代理对象和被代理对象的关系,然后实现代理逻辑
    //动态代理必须实现一个或多个接口
    private userDao userDao1;//目标对象也就是真实对象
        public Object creatProxy(userDao userDao1) {
    this.userDao1 = userDao1;
    return Proxy.newProxyInstance(jdkProxy.class.getClassLoader(), userDao1.getClass().getInterfaces(), this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    //增强方法
    Myaspect myaspect = new Myaspect();
    myaspect.addBefore();
    Object obj = method.invoke(userDao1, args);//实现调用目标方法
    myaspect.deleteBefore();
    return obj;
    }
    }
    测试jdk代理
    public class jdkProxyTest {
    public static void main(String[] args) {
    jdkProxy jdk = new jdkProxy();
    // userDao userDao1 = new UserDaoImp();
    userDao userDao2 = (userDao) jdk.creatProxy(new UserDaoImp());
    userDao2.addUser();

    }
    }

    结果:

    添加之前的检查
    添加用户
    删除之前的检查

  • 相关阅读:
    怎样绘制一个三角形边框
    怎样绘制一条线段
    怎样绘制矩形
    怎样判断浏览器是否支持canvas
    怎样创建一个canvas画布环境
    怎样理解Canvas
    怎样删除一条Cookie
    怎样在浏览器端增加一条Cookie
    怎样限制第三方Cookie
    怎样理解第三方Cookie
  • 原文地址:https://www.cnblogs.com/jasonboren/p/10565328.html
Copyright © 2011-2022 走看看