获取所有注解

obj.getClass().getMethod("myMetch", String.class, int.class).getAnnotations()

package net.jeesite.java;

import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;

@Retention(value = RetentionPolicy.RUNTIME)
@interface Meta {

    String length();

    String name();

    int age();

}

@Retention(value = RetentionPolicy.RUNTIME)
@interface MeTe {

    String length();

    String name();

    int age();

}

public class MetaTest {

    @Meta(age = 0, length = "2", name = "测试注解")
    public static void myMetch() throws NoSuchMethodException, SecurityException {
        MetaTest obj = new MetaTest();

        Class<?> c = obj.getClass();

        System.out.println("c:" + c.getConstructors().length);

        Method m = c.getMethod("myMetch");
        System.out.println("m:" + m.getName());
        Meta meta = m.getAnnotation(Meta.class);

        System.out.println("meta.length():" + meta.length());
        System.out.println("meta.name():" + meta.name());
        System.out.println("meta.age():" + meta.age());

    }

    @Meta(age = 30, length = "80", name = "测试带参数方法注解")
    @MeTe(age = 30, length = "80", name = "测试带参数方法注解")
    public static void myMetch(String name, int age) throws NoSuchMethodException, SecurityException {
        MetaTest obj = new MetaTest();

        Class<?> c = obj.getClass();

        System.out.println("c:" + c.getConstructors().length);

        Method m = c.getMethod("myMetch", String.class, int.class);
        System.out.println("m:" + m.getName());
        Meta meta = m.getAnnotation(Meta.class);

        System.out.println("meta.length():" + meta.length());
        System.out.println("meta.name():" + meta.name());
        System.out.println("meta.age():" + meta.age());
        Annotation[] a = obj.getClass().getMethod("myMetch", String.class, int.class).getAnnotations();
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i].getClass().getName());
            System.out.println(a[i]);
        }

    }

    public static void main(String[] args) {

        try {
            myMetch("小熊", 31);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }
    }

}

运行结果:

c:1
m:myMetch
meta.length():80
meta.name():测试带参数方法注解
meta.age():30
net.jeesite.java.$Proxy1
@net.jeesite.java.Meta(age=30, length=80, name=测试带参数方法注解)
net.jeesite.java.$Proxy2
@net.jeesite.java.MeTe(age=30, length=80, name=测试带参数方法注解)

时间: 01-24

获取所有注解的相关文章

获取映射注解,查询数据库字段的信息

//通过循环 可以获得 注解中的name值@Column(name="EO_XXX"),本方法获取的是 get方法的注解 Method[] methods= EoOrderMaterielModel.class.getMethods();  Map<String,String> modelColumns=new HashMap<String, String>();  for(Method m:methods){   Annotation ats[]=m.getA

AspectJ获取方法注解的信息

在使用Aspectj获取方法注解信息的时候,可以使用下面的代码片段: /** * Get value of annotated method parameter */ private <T extends Annotation> T getMethodAnnotation(ProceedingJoinPoint joinPoint, Class<T> clazz) { MethodSignature methodSignature = (MethodSignature) joinP

AOP中获取自定义注解的参数值

目录 1.利用注解实现AOP的基本流程 1.1.创建一个注解,用来注解切点(pointcut) 1.2.创建一个service,使用上面定义的注解来指定切点 1.3.创建Aspect,增加业务逻辑 1.4.创建Spring配置类 1.5.测试 2.获取自定义注解的参数 Spring中,可以通过自定义注解的方式来实现AOP,比如下面简单的示例: 1.1.创建一个注解,用来注解切点(pointcut) package cn.ganlixin.annotation; import java.lang.

springMvc中获取通过注解获取properties配置文件

springMvc的项目中,通过注解@Value获取properties配置文件中的配置,使用该注解必须引入的包: spring-beans-4.1.4.RELEASE.jar 下面是需要在spring的配置文件中配置的内容 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns

AOP通过反射获取自定义注解

自定义注解: @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface DemoAnno { String value() default ""; } AOP: @Pointcut("@annotation(com.hephae.aop.aop.DemoAnno)") public void demoAspect

18.3.2从Class上获取信息(注解)

package d18_3_1; /** * Class类上所包含的注解 * * getAnnotation(Class annotationClass) 获取该元素上指定的类型的注解 * getAnnotations():返回此元素上存在的所有注解 * getDeclaredAnnotations():返回直接存在于此元素上的所有注解 */ import java.lang.annotation.Annotation; import java.lang.reflect.Field; impor

AOP获取方法注解实现动态切换数据源

(其中@Order(1)作用: Spring中的事务是通过aop来实现的,当我们自己写aop拦截的时候,会遇到跟spring的事务aop执行的先后顺序问题,比如说动态切换数据源的问题,如果事务在前,数据源切换在后,会导致数据源切换失效,所以就用到了Order(排序)这个关键字.) @Order(1) @Aspect @Repository public class DataSourceAspect { @Pointcut("execution(* com.xxx.service.impl.*.*

代理类会导致Method无法获取参数注解

获取方法的正确姿势:Method[] methods = ReflectionUtils.getAllDeclaredMethods(AopUtils.getTargetClass(bean)); 错误姿势:Method[] methods = ReflectionUtils.getAllDeclaredMethods(bean.getClass()); 原文地址:http://blog.51cto.com/10705830/2092408

获取RequestMapping注解中的属性

参考:https://www.cnblogs.com/2013jiutian/p/7294053.html @RequestMapping("/value1") @Controller public Class A { @RequestMapping("/value2") public String method1() { return "xxx"; } } Annotation classAnnotation = A.class.getAnno