获取Java类中注解的详细信息

前言:这篇博客主要是为了后续的获取SpringMVC中的全部请求URL做的准备。

public class AnnotationHelper {

    private static final AnnotationHelper helper = new AnnotationHelper();

    protected AnnotationHelper() {

    }

    public static AnnotationHelper getInstance() {
        return helper;
    }

    /**
     * 得到类上面的注解信息
     * @param scannerClass
     * @param allowInjectClass
     * @return
     */
    public Annotation getClassAnnotation(Class<?> scannerClass , Class<? extends Annotation> allowInjectClass) {

        if(!scannerClass.isAnnotationPresent(allowInjectClass)) {
            return null;
        }

        return scannerClass.getAnnotation(allowInjectClass);
    }

    /**
     * 等到方法级别注解的信息
     * @param scannerClass:需要被扫描的class文件
     * @param allowInjectClass:注解的文件
     * @return
     */
    public List<Annotation> getMethodAnnotation(Class<?> scannerClass , Class<? extends Annotation> allowInjectClass) {
        List<Annotation> annotations = new ArrayList<Annotation>();

        for(Method method : scannerClass.getDeclaredMethods()) {
            if(!method.isAnnotationPresent(allowInjectClass)) {
                continue;
            }

            annotations.add(method.getAnnotation(allowInjectClass));
        }

        return annotations;
    }

    /**
     * 使用Java反射得到注解的信息
     * @param annotation
     * @param methodName
     * @return
     * @throws NoSuchMethodException
     * @throws SecurityException
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException
     */
    public Object getAnnotationInfo(Annotation annotation , String methodName) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        if(annotation == null) {
            return null;
        }

        Method method = annotation.getClass().getDeclaredMethod(methodName, null);
        return method.invoke(annotation, null);
    }
}

要判断是否存在指定的Java注解,只需要调用isAnnotationPresent方法,就能够实现是否存在制定的注解。那么,方法以及类上的注解判断,就能够轻松搞定。那么,接下来,就是要获取注解的详细信息。通过调用getAnnotation方法,就能够获取得到该注解,然后通过Java的反射,就能够获取得到该注解中指定方法的结果值。

时间: 2024-10-14 12:44:21

获取Java类中注解的详细信息的相关文章

获取Java类中所有Field

import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; /**  * 反射集合类  * */ public class ReflectUtils { /**  * 获取类clazz的所有Field,包括其父类的Field,如果重名,以子类Field为准.  * @param clazz  * @return Field数组  */ public static Field[] getA

java类中获取ServletContext的方法

起因是我想要获取一个相对路径,需要用到servletContext的getRealPath()方法,于是上网搜索,找到两种方法来获取ServletContext. 第一种方法是这样的: ServletActionContext.getServletContext(): 后来发现这种方法只有在从浏览器打开的时候才能获取到ServletContext,否则在普通的java类中会报空指针错误(找不到ServletContext),猜测可能是因为ServletActionContext是struts2封

如何在java类中获取javaWeb的根路径

我们有时候需要在java类中(包括util类等)获取web的根路径,可以通过class类路径来获取: public static String getRealPath(Class clazz) { String url = clazz.getResource("").getPath(); int displace = url.indexOf("WEB-INF"); StringBuffer buffer = new StringBuffer(); for (int

如何在windows下和linux下获取文件(如exe文件)的详细信息和属性

程序员都很懒,你懂的! 最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息.最后由我用java实现linux上exe文件的版本号读取功能.下面是详细代码: package com.herman.utils; import java.io.File; import java.io.FileNotFoundException; import java.io.I

java类中调用servlet

一.Java中调用servlet说明: 我们有时可能需要在Java类中调用Servlet从而实现某些特殊的功能,在JavaAPI中提供了一个URL的类,其中openStream( )方法可以打开URL的连接,并返回一个用于该连接读入的InputStream. 二.Java中调用servlet应用举例: package com.solid.test; import java.io.BufferedReader; import java.io.IOException; import java.io.

java类中属性的加载顺序,以及内存分配情况介绍

看下面例子及说明: /** 假如有外部类调用了该类,代码为:new StaticTest(); 那么下面是类属性的加载顺序 */ public class StaticTest{ public int dsd=2;//第3 //多个对象会有多次分配内存 public awds() { int sdsfsd=2;//第4 //多个对象会有多次分配内存 } //静态代码块 static{ System.out.println("静态代码块正在加载...");//第1 } public st

Java 类中成员初始化顺序

Java 中的类成员 基本分为 静态成员, 实例变量  方法中特别的是静态方法和构造方法. 1.定义一个类 public class ClassLoaderTest { public int a ; public String b; private static int c; public  ClassLoaderTest(){ System.out.println("执行前:"+ a + "  "+ b); a = 10; b = "lisi"

java web项目,java类中获得WEB-INF路径

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 private static String getWebInfPath() {         URL url = 当前类.class.getProtectionDomain().getCodeSource().getLocation();         String path = url.toString();         int index = pat

java类中定义接口

今天看到一个java类中定义了接口,写个备忘录,记录一下 1 package com.gxf.test; 2 3 public class Test_interface { 4 public interface show{ 5 public void show(); 6 } 7 static class TestInterface implements show{ 8 9 @Override 10 public void show() { 11 System.out.println("this