首页 > 文章列表 > Java注解入门案例代码分析

Java注解入门案例代码分析

java
296 2023-04-21

Java注解入门案例代码分析

Talk is cheap, show me the code.

定义注解

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;



@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

public @interface MyLoveForYou {

	String love();

}

定义类

public class Love {

	@MyLoveForYou(love="吾爱亦吾心")

	private String love;

	public String getLove() {

		return love;

	}

	public void setLove(String love) {

		this.love = love;

	}

	//重写 toString() 方法。

	@Override

	public String toString() {

		return "Love [love=" + love + "]";

	}

}

处理注解类

import java.lang.reflect.Field;



public class ProcessAnnotation {

	private static Love love;

	

	//创建 love 实例

	public static Love getLove(){

		Class<?> clazz = Love.class;

		try {

			Field field = clazz.getDeclaredField("love");

			field.setAccessible(true);

			MyLoveForYou  myLoveForYou = field.getAnnotation(MyLoveForYou.class);

			String fieldLove = myLoveForYou.love();

			try {

				love = (Love)clazz.newInstance();

			} catch (InstantiationException | IllegalAccessException e) {

				e.printStackTrace();

			}

			love.setLove(fieldLove);

		} catch (NoSuchFieldException | SecurityException e) {

			e.printStackTrace();

		}

		return love;

	}

}

测试

import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;



public class Test {

	public static void main(String[] args) throws 

	ClassNotFoundException, NoSuchMethodException, 

	SecurityException, InstantiationException, 

	IllegalAccessException, IllegalArgumentException, InvocationTargetException {

	//异常有点多,但是不用担心,其实只有三行代码。

		Love love = ProcessAnnotation.getLove();

		System.out.println(love.getLove());

		System.out.println(love.toString());

	}

}

测试结果

简单说明以下

这里就使用了一个非常简单的注解类,使用了两个最基础的元注解(元注解的意思就是: 修饰的是类的属性 保留到运行期)。

然后就可以使用注解了,简单的使用其实很简单,就像下面这样就像了。

@MyLoveForYou(love="吾爱亦吾心")

这里强调以下,单纯的使用注解是没有任何用的,注解需要借助专门的工具处理,这里定义一个简单的处理注解的类(这个类可能需要一点反射的知识,但是也不要紧,如果你只想知道注解的作用,也可以不用管它,记住用法就行了):ProcessAnnotation

用法:这个类就是干一件事,给 love 赋值为 吾爱亦吾心

最后就是测试了,这里重写了toString() 方法,看起来更加直观一点。