zoukankan      html  css  js  c++  java
  • 笔记:Java反射以及动态代理

     
    一.反射定义
     
    反射功能:
    1.在运行时判断任意一个对象所属的类
    2.在运行时构造任意一个类的对象
    3.在运行时判断任意一个类所具有的成员变量和方法
    4.在运行时调用任意一个对象的方法
    5.生成动态代理
     
    二.反射例子 
     
      Class<?>  classAdminClientFactory = Class.forName("com.ibm.websphere.management.AdminClientFactory");
      
     Class<?> classAdminClient = Class.forName("com.ibm.websphere.management.AdminClient");
     
       Method methodQueryMBeans = classAdminClient.getMethod("queryMBeans", new Class<?>[]{ObjectName.class, QueryExp.class});
      Method methodGetAttribute = classAdminClient.getDeclaredMethod("getAttribute", new Class<?>[]{ObjectName.class, String.class});
     
      Object adminClient = methodCreateAdminClient.invoke(classAdminClientFactory, new Object[]{props});
     
     long freeMemory = Long.valueOf((String) methodGetAttribute.invoke(adminClient, new Object[]{objname, "freeMemory"})) ;
     
     
    三、动态代理
     
    例子,模拟事务处理:
     
    class TransationInvocationHandler implements InvocationHandler {
     
        Object obj;
     
        public TransationInvocationHandler(Object obj) {
            this.obj = obj;
        }
     
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            boolean neeTransaction = method.getName().startsWith("save")
                    || method.getName().startsWith("update")
                    || method.getName().startsWith("delete");
            if (neeTransaction) {
                System.out.println("----Transaction Begin---");
            }
            Object value = method.invoke(obj, args);
            if (neeTransaction) {
                System.out.println("----Transaction End---");
            }
            return value;
        }
    }
     
    interface Dao {
     
        Object save(Object obj);
     
        Object update(Object obj);
     
        Object get(int i);
     
        List<Object> gets();
     
        boolean delete(int i);
    }
     
    class DaoImpl implements Dao {
     
        @Override
        public Object save(Object obj) {
            System.out.println("----save---");
            return null;
        }
     
        @Override
        public Object update(Object obj) {
            System.out.println("----update---");
            return null;
        }
     
        @Override
        public Object get(int i) {
            System.out.println("----get---");
            return null;
        }
     
        @Override
        public boolean delete(int i) {
            System.out.println("----delete---");
            return true;
        }
     
        @Override
        public List<Object> gets() {
            System.out.println("----gets---");
            return null;
        }
    }
     
    public class Client {
     
        public static void main(String[] args) {
            Dao dao = new DaoImpl();
            Dao daoProxy = (Dao) Proxy.newProxyInstance(DaoImpl.class.getClassLoader(), new Class<?>[]{Dao.class}, new TransationInvocationHandler(dao));
     
            System.out.println();
            daoProxy.save(null);
     
            System.out.println();
            daoProxy.update(null);
     
            System.out.println();
            daoProxy.delete(0);
     
            System.out.println();
            daoProxy.get(0);
     
            System.out.println();
            daoProxy.gets();
     
        }
    }
     
    输出:
     
     
    ----Transaction Begin---
    ----save---
    ----Transaction End---
     
    ----Transaction Begin---
    ----update---
    ----Transaction End---
     
    ----Transaction Begin---
    ----delete---
    ----Transaction End---
     
    ----get---
     
    ----gets---
     
    写好的博文,发表以后只剩最前面一小节了,没心思重复写了,就弄成这个样子。。
  • 相关阅读:
    CSS3 @fontface实现颜色大小可控的三角效果
    html5 canvas之绘制曲线
    li内文字超出隐藏,不允许出现半汉字截断,超出后仍显示new图片,小于宽度自动跟随
    告别图片—使用字符实现兼容性的圆角尖角效果beta版
    常用JQuery插件整理
    获取不到header的自定义参数的值
    mavenresourcesproduction:xxxx: java.lang.NegativeArraySizeException
    Cannot find module '@babel/core'
    C# Set集合
    关于tomcat部署web服务方式
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276575.html
Copyright © 2011-2022 走看看