Java注解Annotation的写法以及注意

现许多流行框架都有注解配置,Java注解是JDK1.5以后引入的一个特性。它可以使用在类、方法、数据字段上。注解是与反射配合使用的,可以通过Class类的getAnnatation等方法获取注解。

先来看看怎么编写注解吧。

1、声明。

声明类使用的是class关键字,接口是interface关键字,声明注解使用的是@interface关键字,如下:

public @interface MyAnnatation {

}
2、编写注解的内容。

public @interface MyAnnatation {
	
	//为注解声明一个username属性,默认值为空串
	public String username() default "";
	
	//value属性没有默认值
	public String value();
	
	public String sex() default "man";

}
3、编写完成后最重要的是要在注解类上加上几个注解,以表示该注解类是用来注解什么的。最终如下:

@Documented //文档声明,会被javadoc文档工具记录
//声明注解类注解的范围,是变量,还是方法,还是类,还是参数
@Target(value={ElementType.FIELD,ElementType.METHOD,ElementType.TYPE,ElementType.CONSTRUCTOR})
//最重要的一个
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnatation {
	
	//为注解声明一个username属性,默认值为空串
	public String username() default "";
	
	//value属性没有默认值
	public String value();
	
	public String sex() default "man";

}
最重要的属于给注解类加上@Retention注解。该注解有三个值,SOURCE、CLASS、RUNTIME。

我们知道java源文件经过javac指令后被编译成class字节码(Byte Code)文件,再经JVM解析执行class文件。

SOURCE表示注解只会存在于源文件(.java)中,经过编译后class文件中就不存在该注解。

CLASS表示经过编译后任然会存在与class文件中,但经JVM解析后不会出现在内存中。

RUNTIME则比CLASS更近一步,运行时仍能生效。

编写完成后,试一试怎么使用注解吧!

1、新建User类,在User的其中一个属性或者方法上使用MyAnnatation注解。

public class User {

	private String username;
	private String password;

	@MyAnnatation(value="我是getUsername方法",username="zs")
	public String getUsername() {
		return username;
	}

	@MyAnnatation(value="我是setUsername方法")
	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}
2、通过反射获取MyAnnatation的值。

public class TestAnnatation {
	
	
	public static void main(String[] args) throws Exception{
		
		@SuppressWarnings("rawtypes")
		Class clz = Class.forName("org.yamikaze.model.User");
		
		Method[] methods = clz.getDeclaredMethods();
		for(Method method : methods) {
			//判断方法上是否声明了MyAnnatation注解
			if(method.isAnnotationPresent(MyAnnatation.class)) {
				//相应操作
				//获取方法上的注解
				MyAnnatation ma = method.getAnnotation(MyAnnatation.class);
				System.out.println(ma.value() + "," + ma.username() + "," + method.getName());
			}
		}
	}

}

结果:


这儿只是做的简单的操作,注解只有与反射配合才能发挥出作用,比如hibernate-validator验证框架,Mybatis的参数Param注解,Spring的Service、Controller、Repository等注解。

由于编写注解比较简单(认为难的表打我/(ㄒoㄒ)/~~),建议多看下Spring等开源框架的注解写法。




  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值