⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 annotationutils.java

📁 在Struts2中的jar包xwork的源代码.版本为2.0.7
💻 JAVA
字号:
/* * Copyright (c) 2002-2006 by OpenSymphony * All rights reserved. */package com.opensymphony.xwork2.util;import java.io.File;import java.lang.annotation.Annotation;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.net.URL;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * <code>AnnotationUtils</code> * * Various utility methods dealing with annotations * * @author Rainer Hermanns * @author Zsolt Szasz, zsolt at lorecraft dot com * @version $Id: AnnotationUtils.java 1209 2006-11-17 07:53:04Z mrdon $ */public class AnnotationUtils {    private static final Pattern SETTER_PATTERN = Pattern.compile("set([A-Z][A-Za-z0-9]*)$");    private static final Pattern GETTER_PATTERN = Pattern.compile("(get|is|has)([A-Z][A-Za-z0-9]*)$");    /**     * Adds all fields with the specified Annotation of class clazz and its superclasses to allFields     *     * @param annotationClass     * @param clazz     * @param allFields     */    public static void addAllFields(Class annotationClass, Class clazz, List<Field> allFields) {        if (clazz == null) {            return;        }        Field[] fields = clazz.getDeclaredFields();        for (Field field : fields) {            Annotation ann = field.getAnnotation(annotationClass);            if (ann!=null) {                allFields.add(field);            }        }        addAllFields(annotationClass, clazz.getSuperclass(), allFields);    }    /**     * Adds all methods with the specified Annotation of class clazz and its superclasses to allFields     *     * @param annotationClass     * @param clazz     * @param allMethods     */    public static void addAllMethods(Class annotationClass, Class clazz, List<Method> allMethods) {        if (clazz == null) {            return;        }        Method[] methods = clazz.getDeclaredMethods();        for (Method method : methods) {            Annotation ann = method.getAnnotation(annotationClass);            if (ann!=null) {                allMethods.add(method);            }        }        addAllMethods(annotationClass, clazz.getSuperclass(), allMethods);    }    /**     *     * @param clazz     * @param allInterfaces     */    public static void addAllInterfaces(Class clazz, List allInterfaces) {        if (clazz == null) {            return;        }        Class[] interfaces = clazz.getInterfaces();        allInterfaces.addAll(Arrays.asList(interfaces));        addAllInterfaces(clazz.getSuperclass(), allInterfaces);    }    public static List<Method> findAnnotatedMethods(Class clazz, Class<? extends Annotation> annotationClass) {        List<Method> methods = new ArrayList<Method>();        findRecursively(clazz, annotationClass, methods);        return methods;    }    public static void findRecursively(Class clazz, Class<? extends Annotation> annotationClass, List<Method> methods) {        for (Method m : clazz.getDeclaredMethods()) {            if (m.getAnnotation(annotationClass) != null) { methods.add(0, m); }        }        if (clazz.getSuperclass() != Object.class) {            findRecursively(clazz.getSuperclass(), annotationClass, methods);        }    }    /**     * Returns the property name for a method.     * This method is independant from property fields.     *     * @param method The method to get the property name for.     * @return the property name for given method; null if non could be resolved.     */    public static String resolvePropertyName(Method method) {        Matcher matcher = SETTER_PATTERN.matcher(method.getName());        if (matcher.matches() && method.getParameterTypes().length == 1) {            String raw = matcher.group(1);            return raw.substring(0, 1).toLowerCase() + raw.substring(1);        }        matcher = GETTER_PATTERN.matcher(method.getName());        if (matcher.matches() && method.getParameterTypes().length == 0) {            String raw = matcher.group(2);            return raw.substring(0, 1).toLowerCase() + raw.substring(1);        }        return null;    }    /**     * Retrieves all classes within a packages.     * TODO: this currently does not work with jars.     *     * @param pckgname     * @return Array of full qualified class names from this package.     */    public static String[] find(Class clazz, final String pckgname) {        List<String> classes = new ArrayList<String>();        String name = new String(pckgname);        if (!name.startsWith("/")) {            name = "/" + name;        }        name = name.replace('.', File.separatorChar);        final URL url = clazz.getResource(name);        final File directory = new File(url.getFile());        if (directory.exists()) {            final String[] files = directory.list();            for (int i = 0; i < files.length; i++) {                if (files[i].endsWith(".class")) {                    classes.add(pckgname + "." + files[i].substring(0, files[i].length() - 6));                }            }        }        return classes.toArray(new String[classes.size()]);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -