zoukankan      html  css  js  c++  java
  • java反射--超级好用的方法

    1.根据方法名,获取类的对应的方法

            Method changeSessionIdMethod = ReflectionUtils.findMethod(HttpServletRequest.class, "changeSessionId");
            if(changeSessionIdMethod == null) {
                throw new IllegalStateException("HttpServletRequest.changeSessionId is undefined. Are you using a Servlet 3.1+ environment?");
            }
            System.out.println(changeSessionIdMethod);

    2.休眠当前线程

    TimeUnit.MILLISECONDS.sleep(1000);

     3. 替换配置文件中特殊的变量将变量中含有 @{test.test} 将变量 test.test 替换为系统中的其他值。

    private static final PropertyPlaceholderHelper helper = new PropertyPlaceholderHelper("@{", "}", ":", false);
        
        private static final PlaceholderResolver placeholderResolver=new PlaceholderResolver(){
            @Override
            public String resolvePlaceholder(String key) {
                
                return System.getProperty(key);
            }
            
        };

     4.获取对象的方法名称。dubbo 获取dubbo接口里的方法

    String[] methods = Wrapper.getWrapper(interfaceClass).getMethodNames();

     5. {0} 字符串格式化。

            String template="test1={0},test2={1},test3={2}";
            Object[] objects=new Object[]{0,1,"test2"};
            String emailContent = MessageFormat.format(template, objects);
            System.out.println(emailContent);

     6.spring HiddenHttpMethodFilter 将http里post方法转化为参数里的方法

        @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
                throws ServletException, IOException {
    
            HttpServletRequest requestToUse = request;
    
            if ("POST".equals(request.getMethod()) && request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) == null) {
                String paramValue = request.getParameter(this.methodParam);
                if (StringUtils.hasLength(paramValue)) {
                    requestToUse = new HttpMethodRequestWrapper(request, paramValue);
                }
            }
    
            filterChain.doFilter(requestToUse, response);
        }

     7.判断classpath 中是否存在某个类   原理:先判断是否是基础类型, 再 根据  ClassLoader clToUse = classLoader;          (clToUse != null ? clToUse.loadClass(name) : Class.forName(name))

    org.springframework.util.ClassUtils  

            if (ClassUtils.isPresent(REACTIVE_WEB_ENVIRONMENT_CLASS, null)
                    && !ClassUtils.isPresent(MVC_WEB_ENVIRONMENT_CLASS, null)) {
                return WebApplicationType.REACTIVE;
            }
            for (String className : WEB_ENVIRONMENT_CLASSES) {
                if (!ClassUtils.isPresent(className, null)) {
                    return WebApplicationType.NONE;
                }
            }

     9.获取classpath下的文件,和 jar包里的文件。

        public static void main(String[] args) throws Exception {
            Enumeration<URL> urls = ClassLoader.getSystemResources("META-INF/services/ch.qos.logback.classic.spi.Configurator");
            while (urls.hasMoreElements()) {
                URL url = urls.nextElement();
                System.out.println(url.getPath());
            }
        }
    // 从url 读取文件内容
    BufferedReader reader = new BufferedReader(new InputStreamReader(resourceURL.openStream(), "utf-8"));  

     10.向目录里写文件,目录和文件不能直接用字符串链接,如目录为:.,文件名为:test.log,直接链接为.log会出错。

    public class FileUtil {
    
        public static File getFile(String path,String fileName) throws IOException{
            File directory=new File(path);
            String filePath=directory.getCanonicalPath();
            return new File(filePath+"/"+fileName);
        }
    }

     11.字符串按字节长度截取

        public static byte[] subBytes(byte[] src, int begin, int count) {
            byte[] bs = new byte[count];
            System.arraycopy(src, begin, bs, 0, count);
            return bs;
        }
    if (!StringUtil.isNullOrEmpty(po.getContent())){
                byte[] contentB= new byte[0];
                try {
                    contentB = po.getContent().getBytes("utf-8");
                    if (contentB.length>1024){
                        po.setContent(new String(StringUtil.subBytes(contentB,0,1024),"utf-8"));
                    }
                } catch (UnsupportedEncodingException e) {
                    String result="content bytes length > 1024,convert error";
                    po.setContent(result);
                    log.error(result,e);
                }
            }

     12.获取类的调用链路

        private Class<?> deduceMainApplicationClass() {
            try {
                StackTraceElement[] stackTrace = new RuntimeException().getStackTrace();
                for (StackTraceElement stackTraceElement : stackTrace) {
                    if ("main".equals(stackTraceElement.getMethodName())) {
                        return Class.forName(stackTraceElement.getClassName());
                    }
                }
            }
            catch (ClassNotFoundException ex) {
                // Swallow and continue
            }
            return null;
        }
  • 相关阅读:
    关于java和jvm的思考
    java之try、catch、finally
    Microsoft SQLServer有四种系统数据库
    HDU 5087
    uva639 暴力、回溯
    uva127
    uva 131
    洛谷 P2580 于是他错误的点名开始了
    字典树(trie)
    HTML学习笔记
  • 原文地址:https://www.cnblogs.com/z-test/p/9327211.html
Copyright © 2011-2022 走看看