Java注解的理解

这两天想搭一个纯粹使用注解的ssm框架,于是就看了看mybatis注解的使用方式,但是感觉java中底层注解平时不常使用都忘得差不多了,于是就重新看了一遍.
这里简单记录下1.Java中开发自定义注解类,2.自定义注解类的使用,3.自定义注解类的解析

一.自定义注解类开发

 

package com.star.frame.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Name {
  String id () default "1";
  String value() default "";
  int len() default 100;
  String[] properties() default {"p1","p2"};
  Class<? extends Object> type() default String.class;
}

 

 

理解:1.注解类与接口相似,里面只能定义静态常量和抽象方法;它与接口,枚举,类属于同一层次,都被称作一种类型。

          2.java底层中提供的注解有两种:(1)常用的基本注解:@SuppressWarnings,@Deprecated,@Override(2)元注解:@Retention,@Target

          3.注解类的使用范围由@Retention决定,分三种:

RetentionPolicy.SOURCE:指定注解只保留在源文件当中,编译成类文件后就把注解去掉。

RetentionPolicy.CLASS:指定注解只保留在源文件和编译后 class 文件中,当jvm加载类时就把注解去掉。

RetentionPolicy.RUNTIME:指定注解可以保留在jvm中,这样就可以使用反射获取信息了。

默认保留在类中文件中,所以使用时一般要指定保存到RetentionPolicy.RUNTIME中

  4.可以使用注解的元素类型由@Target决定,分为以下几种:

ElementType.TYPE:说明该注解只能被声明在一个类前。

ElementType.FIELD:说明该注解只能被声明在一个类的字段前。

ElementType.METHOD:说明该注解只能被声明在一个类的方法前。

ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。

ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。

ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。

ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。

ElementType.PACKAGE:说明该注解只能声明在一个包名前

不写则默认可以使用于所有元素类型。

二.自定义注解类的使用

package com.star.frame.annotation;

public class Use {

	@Name(id="name1",len=50,properties={"a","b"},value="test")
	public boolean getName(String id,int len ,String[] properties,String value){
		System.out.println(id);
		System.out.println(len);
		System.out.println(properties[0]+properties[1]);
		System.out.println(value);
		return true;
	}
}

 理解:注解的使用方法:

        1.@注解名:一般使用于有默认值的注解

        2.@注解名(方法名=方法返回值) :使用于没有默认值的注解,此时必须制定值

        3.@注解名(方法名=方法返回值,方法名={返回值1,返回值2}) :使用于方法返回数组类型的注解

        4.@注解名(返回值) :使用于只有value方法的注解,可以只写返回值

 

三.自定义注解类的解析

public class Parse {

	public void parseMethod(Class clzz) throws Exception{
		Object o = clzz.getConstructor(new Class[]{}).newInstance(new Object[]{});
		Method[] methods = clzz.getDeclaredMethods();
		for (Method method : methods) {
			Name nameClzz = method.getAnnotation(Name.class);
			if(nameClzz != null){
				String id = nameClzz.id();
				String value = nameClzz.value();
				int len = nameClzz.len();
				String[] props = nameClzz.properties();
				Class< ? extends Object> clz = nameClzz.type();
				method.invoke(o,id,len,props,value);
			}
		}
		
	}
	
}

 理解:当解析注解的时候,一般通过getAnnotation 或 getAnnotations 来获取类,方法,属性的注解类。从而使用反射进行处理

 

以上就是对于java注解使用方法的简单总结,此中有些理解的用法是参考一些博客总结出来的,作为自己的积累使用。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值