`

自定义注解使用

 
阅读更多

使用自定义注解将一个实体属性有序分成两组

自定义注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest {
	
	public enum Obj{A, B};
	
	public Obj obj();
	
	public int index() default Integer.MAX_VALUE;

}

 实体的使用注解

public class Person {
	private String username;//姓名
	private int sex;//性别
	private int age;//年龄
	private String cardNo;//证件号
	
	private String job;
	private Double salary;
	private String Address;
	
	@AnnotationTest(obj = Obj.A, index = 1)
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	@AnnotationTest(obj = Obj.A, index = 2)
	public int getSex() {
		return sex;
	}
	public void setSex(int sex) {
		this.sex = sex;
	}
	@AnnotationTest(obj = Obj.A, index = 3)
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@AnnotationTest(obj = Obj.A, index = 4)
	public String getCardNo() {
		return cardNo;
	}
	public void setCardNo(String cardNo) {
		this.cardNo = cardNo;
	}
	@AnnotationTest(obj = Obj.B, index = 1)
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	@AnnotationTest(obj = Obj.B, index = 2)
	public Double getSalary() {
		return salary;
	}
	public void setSalary(Double salary) {
		this.salary = salary;
	}
	@AnnotationTest(obj = Obj.B, index = 3)
	public String getAddress() {
		return Address;
	}
	public void setAddress(String address) {
		Address = address;
	}
	
}

 比较器排序

public class MethodComparator implements Comparator<Method> {

	@Override
	public int compare(Method o1, Method o2) {
		AnnotationTest at1 = o1.getAnnotation(AnnotationTest.class);
		AnnotationTest at2 = o1.getAnnotation(AnnotationTest.class);
		if(at1.index() < at2.index()) {
			return 1;
		} else if(at1.index() > at2.index()) {
			return -1;
		} else {
			return 0;
		}
	}

}

 测试

public class Test {
	
	public static void main(String[] args) {
		testAnnotation();
	}

	public static void testAnnotation() {
		Person p = new Person();
		p.setUsername("share");
		p.setAge(25);
		p.setSex(1);
		p.setCardNo("123456");
		p.setJob("intenet");
		p.setSalary(12345.0);
		p.setAddress("shanghai");
		
		List<Method> methodA = getMethod(p, Obj.A);
		List<Method> methodB = getMethod(p, Obj.B);
		
		for (Method method : methodA) {
			if(method.getName().startsWith("get")) {
				try {
					System.out.println(method.invoke(p));
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		System.out.println("===========================");
		for (Method method : methodB) {
			if(method.getName().startsWith("get")) {
				try {
					System.out.println(method.invoke(p));
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	} 
	
	/**
	 * 对象分类存储
	 * 2015年10月25日 caifan
	 * @param p
	 * @param obj
	 * @return
	 */
	public static List<Method> getMethod(Person p, Obj obj) {
		Method[] methods = p.getClass().getDeclaredMethods();
		List<Method> methodList = new ArrayList<Method>();
		for (Method method : methods) {
			AnnotationTest at = method.getAnnotation(AnnotationTest.class);
			if(method.isAnnotationPresent(AnnotationTest.class) && method.getName().startsWith("get")){
				if(at.obj() == obj){
					methodList.add(method);
				}
			}
		}
		MethodComparator mc = new MethodComparator();
		Collections.sort(methodList, mc);
		return methodList;
	}
}

 输出结果:(结果根据注解中的Obj 和 index 分成了两类)

share

1

25

123456

===========================

shanghai

intenet

12345.0

分享到:
评论

相关推荐

    Java自定义注解使用反射获取字段注解

    接下来,我们可以创建一个类并使用自定义注解标记某个字段: ```java public class AnnotationDemo { @MyCustomAnnotation("测试注解") private String testField; } ``` 现在,我们可以使用反射机制来获取这个...

    java 自定义注解例子

    自定义注解的定义类似于接口,但使用`@interface`关键字。例如,我们可以定义一个`@SoldOut`注解,表示某种商品售罄: ```java import java.lang.annotation.Retention; import java.lang.annotation....

    java 自定义注解验证

    `src`目录则是源代码存放的地方,其中可能包含自定义注解的定义以及使用这些注解的代码。 总之,Java自定义注解验证是增强代码规范性和健壮性的有效手段,通过自定义注解可以实现更精细的代码管理和验证。本案例中...

    自定义注解实现伪动态传参的小demo

    在这个“自定义注解实现伪动态传参的小demo”中,我们将探讨如何创建一个自定义注解,以允许在注解中传递类似于动态参数的数据。 首先,自定义注解的定义通常以`@interface`关键字开始,我们可以定义一些元素(也...

    自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏

    自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回...

    java自定义注解实践

    例如,我们可以使用自定义注解来描述方法的参数信息,以便在运行时获取这些信息。 ```java @Sample(value="I'm here.") public void anyName() { // ... } ``` 在上面的例子中,我们使用了 `Sample` 注解来描述 `...

    实现生成自定义注解的实体类

    在Java编程语言中,自定义注解是一种强大的...通过定义、使用、处理和集成自定义注解,我们可以构建更灵活、更强大的应用程序。在实际项目中,合理利用自定义注解能够显著提升开发效率,减少代码冗余,增强框架扩展性。

    excel导入动态校验,自定义注解动态校验

    自定义注解动态校验则是在编程环境中,通过使用自定义注解来定义数据验证规则。注解是一种元数据,可以提供有关代码的附加信息,通常用于简化代码并提高可读性。在导入Excel数据时,开发者可以创建自定义注解,这些...

    自定义注解得使用,模拟spring通过注解方式创建bean实例

    要创建自定义注解,我们需要使用`@interface`关键字。例如,我们可以定义一个名为`MyComponent`的注解: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java....

    Java中的注解及自定义注解使用详解.docx

    在使用自定义注解时,可以使用反射API来读取和处理这些注解。例如,`java.lang.reflect.AnnotatedElement`接口提供了访问注解的方法。 在实际开发中,注解广泛应用于依赖注入、持久化框架、测试框架等领域。例如,...

    自定义注解实现拦截sql.rar

    在Java开发中,自定义注解是一种非常强大的工具,它允许我们为代码添加元数据,以便在运行时或编译时进行处理。本示例中,“自定义注解实现拦截SQL”是关于如何通过注解来动态修改执行的SQL语句,以在其中增加特定的...

    Spring 自定义注解的解析

    接下来,我们将讨论如何在Spring中使用`@ComponentScan`注解来扫描并处理自定义注解。`@ComponentScan`是Spring的核心组件扫描机制,它会遍历指定包及其子包下的所有类,寻找标记了Spring的组件注解(如`@Component`...

    SpringBoot AOP各种注解、自定义注解、鉴权使用案例(免费下载)

    例如,创建一个名为`@Cacheable`的自定义注解,用于缓存方法的返回结果: ```java @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Cacheable { String cacheName() default ...

    Java自定义注解实例

    3. **使用**: 在代码中,可以将自定义注解应用于目标元素,如: ```java public class MyClass { @MyAnnotation(value = "Hello, World!") public void myMethod() { // ... } } ``` ### 三、注解处理器 ...

    spring中自定义注解(annotation)与AOP中获取注解

    在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...

    spring aop 自定义注解保存操作日志到mysql数据库 源码

    3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑...

    java(spring boot)自定义注解

    2. 使用注解:在需要监控的方法上使用自定义注解,指定相关指标。 ```java @Service public class MyService { @MyMonitor(metricName = "myServiceCall", importance = 5) public void performTask() { // 方法...

    spring自定义注解样例

    本示例主要探讨如何在Spring中创建和使用自定义注解,以及与AOP结合实现动态代理。 首先,我们需要了解自定义注解的基本结构。在Java中,自定义注解是以`@interface`关键字定义的。例如,我们可以创建一个名为`...

    Java自定义注解与spring BeanPostProcessor详解

    使用自定义注解后,我们需要编写处理这些注解的逻辑,这通常是通过注解处理器或者在运行时通过反射实现的。 接下来,我们讨论Spring的BeanPostProcessor。BeanPostProcessor是Spring框架的核心组件之一,它提供了一...

Global site tag (gtag.js) - Google Analytics