zoukankan      html  css  js  c++  java
  • 利用反射来实现动态代理

    实现动态代理,在mybaties中,不需要实现类框架帮创建,只需要

    有一个dao接口就OK了

    dao接口类

    public interface UserDao {
    public void save();
    public void delete();
    public void uodate();
    }

    实现类,只有增删该查方法

    public class UserDaoImp implements UserDao {
    @Override
    public void save() {
    System.out.println("保存的方法");
    }
    @Override
    public void delete() {
    System.out.println("删除的方法");
    }

    @Override
    public void uodate() {
    System.out.println("更新的方法");
    }
    }

    proxy代理工厂,用来创建代理类,可以在增删该查之前之后添加功能,利用反射可以生成多个,

    public class TestProxy implements InvocationHandler{
    //记录了委托类对象即接口类
    private Object obj;
    //得到代理类对象
    public Object getproxyObject(Object obj){
    this.obj=obj;
    return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable {
    System.out.println("代理调用"+method.getName()+"开始");
    //自动调用委托类的方法,Method method 委托类的update,delete,方法自动调用
    Object result = method.invoke(obj, args);
    System.out.println(result);
    System.out.println("代理调用结束");

    return result;
    }

    测试类

    public class Test {
    public static void main(String[] args) {
    UserDao userDao=new UserDaoImp();
    TestProxy factory =new TestProxy();
    UserDao userproxy = (UserDao) factory.getproxyObject(userDao);
    userproxy.save();
    userproxy.delete();
    userproxy.uodate();
    }
    }

  • 相关阅读:
    【HDU 2874】Connections between cities(LCA)
    【Gym 100947C】Rotate It !!
    【CodeForces 615E】Hexagons
    Course Selection CodeChef
    UVA 10779 Collectors Problem[最大流]
    1855: [Scoi2010]股票交易[单调队列优化DP]
    1854: [Scoi2010]游戏[并查集]
    1853: [Scoi2010]幸运数字[容斥原理]
    poj3233 Matrix Power Series
    3969 [Mz]平方和【斐波那契平方和】
  • 原文地址:https://www.cnblogs.com/lgf428/p/6048715.html
Copyright © 2011-2022 走看看