• 反射修改类行为




    • 反射的功能: 我们前面的代码是查看类的功能,除了查看类的功能外,反射还可以修改类的行为
    • BookDao
    public interface BookDao {
      public void insert();
      public void update();
      public void del();
    }
    • BookDaoImpl
    //这么做存在代码重复
    public class BookDaoImpl implements BookDao {
    @Override
    public void insert() {
    try {
    System.out.println("开启会话");
    ////
    System.out.println("插入书籍");
    ///
    System.out.println("事务提交");
    } catch (Exception e) {
    System.out.println("事务回滚");
    e.printStackTrace();
    } finally {
    System.out.println("关闭会话");
    }
    }
    @Override
    public void update() {
    try {
    System.out.println("开启会话");
    ////
    System.out.println("修改书籍");
    ///
    System.out.println("事务提交");
    } catch (Exception e) {
    System.out.println("事务回滚");
    e.printStackTrace();
    } finally {
    System.out.println("关闭会话");
    }
    }
    @Override
    public void del() {
    try {
    System.out.println("开启会话");
    ////
    System.out.println("删除书籍");
    ///
    System.out.println("事务提交");
    } catch (Exception e) {
    System.out.println("事务回滚");
    e.printStackTrace();
    } finally {
    System.out.println("关闭会话");
    }
    }
    }

     在上面代码中存在重复:

    try {
    System.out.println("开启会话");
    ////不同部分
    ///
    System.out.println("事务提交");
    } catch (Exception e) {
    System.out.println("事务回滚");
    e.printStackTrace();
    } finally {
    System.out.println("关闭会话");
    }

    代理

    • 目标类提走重复代码
    public class BookDaoImpl2 implements BookDao {
      @Override
      public void insert() {
        System.out.println("插入书籍");
      }
      @Override
      public void update() {
        System.out.println("修改书籍");
      }
      @Override
      public void del() {
      ////
        System.out.println("删除书籍");
      }
    }
    • 创建代理类
    public class Test02 {
      public static void main(String[] args) {
      //租房子的人
        BookDao target=new BookDaoImpl2();
      //中介
        BookDao bookDao=(BookDao) 
        Proxy.newProxyInstance(Test02.class.getClassLoader(),new Class[]{BookDao.class} , new
        InvocationHandler() {
        @Override
      public Object invoke(Object proxy, Method method, Object[] args) throws
      Throwable {
      //这里放置重复代码
      Object ret=null;
      try {
        System.out.println("============================");
        System.out.println("开启会话");
      ////
        ret= method.invoke(target, args);//让不同代码执行,不同代码再方法中
      ///
        System.out.println("事务提交");
      } catch (Exception e) {
        System.out.println("事务回滚");
        e.printStackTrace();
      } finally {
        System.out.println("关闭会话");
      }
        return ret;
      }
      });
        bookDao.del();
        bookDao.update();
        bookDao.insert();
    }
    }

     

  • 相关阅读:
    [转]PC客户端与Android服务端的Socket同步通信(USB)
    [转]Android手机通过socket与pc通信
    [转]异常:android.os.NetworkOnMainThreadException
    [转]使用openssl库实现RSA、AES数据加密
    朴素贝叶斯分类器
    关于Mysql数据库的注意点
    poj 2386 Lake Counting
    poj 3253 Fence Repair
    poj 3069 Saruman's Army
    pat1100. Mars Numbers (20)
  • 原文地址:https://www.cnblogs.com/yuanshuai1026/p/11580625.html
Copyright © 2020-2023  润新知