zoukankan      html  css  js  c++  java
  • java反射新的应用

    利用java反射动态修改运行中对象的私有final变量,不管有没有get方法获取这个私有final变量。

    spring aop 本质是cglib,动态代理

    可以做很多事情

    query.addCriteria(criteria);
                queryCount.addCriteria(criteria);
                Class<?> queryClassType = query.getClass();
                Class<?> queryCountClassType  = queryCount.getClass();
                try {
                    Field field = queryClassType.getDeclaredField("criteria");
                    field.setAccessible(true);
                    Field fieldQueryCount = queryCountClassType.getDeclaredField("criteria");
                    fieldQueryCount.setAccessible(true);
                    
                    try {
                        System.out.println(field.get(query));
                        Map<String, Criteria> mapCriteriaTemp = (Map<String, Criteria>) field.get(query);
                        Criteria criteriaTemp = mapCriteriaTemp.get(null);
                        mapCriteriaTemp.remove(null);
                        mapCriteriaTemp.put("temp", criteriaTemp);
                        field.set(query, mapCriteriaTemp);
                        System.out.println(field.get(query));
                        
                        System.out.println(fieldQueryCount.get(queryCount));
                        Map<String, Criteria> mapCountCriteriaTemp = (Map<String, Criteria>) fieldQueryCount.get(queryCount);
                        Criteria criteriaCountTemp = mapCountCriteriaTemp.get(null);
                        mapCountCriteriaTemp.remove(null);
                        mapCountCriteriaTemp.put("temp", criteriaCountTemp);
                        fieldQueryCount.set(queryCount, mapCountCriteriaTemp);
                        System.out.println(fieldQueryCount.get(queryCount));
                    } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                } catch (NoSuchFieldException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SecurityException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
                query.addCriteria(criteriaOrderBy);
                
                queryCount.addCriteria(criteriaCount);
    View Code
  • 相关阅读:
    [剑指 Offer 11. 旋转数组的最小数字]
    进程描述符(PCB)
    [剑指 Offer 57. 和为s的两个数字]
    Linux netstat命令
    kafka2.3.X配置文件
    docker
    shell操作mysql数据库
    Linux文件查找之find命令
    sed 切割日志文件
    Linux文本处理之awk
  • 原文地址:https://www.cnblogs.com/usual2013blog/p/4061806.html
Copyright © 2011-2022 走看看