Annotation - juedaiyuer/researchNote GitHub Wiki

#注解#

从某种角度来说,注解可以看成为一个XML元素,

##JDK自带注解##

自定义一个Person接口

package ann;

public interface Person {
	public String name();
	public int age();
	public void sing();
}

自定义一个rose类实现Person接口

package ann;

public class rose implements Person {

	@Override
	public String name() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int age() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void sing() {
		// TODO Auto-generated method stub
	
	}

}	

@Override:用来修饰此方法覆盖了父类的方法
@Deprecated:标注该方法已经过时,如果调用该方法,会在该方法上有一个划线
@suppvisewarnings:标注可以解决@Deprecated标注的方法


##第三方注解##

spring注解

@Autowired
@Service
@Repository

Mybatis注解

@InsertProvider
@UpdateProvider
@Options

##注解分类##

按照运行机制 源码注解
编译时注解(JDK自带注解属于这个范畴)
运行时注解(spring的@Autowired)

##自定义注解##

元注解

元注解在java.lang.annotation包中可以找到

@Target({ElementType.METHOD,ElementType.TYPE})
  • Target说明了Annotation所修饰的对象范围

对象范围

构造方法声明 CONSTRUCTOR
字段声明 FIELD
局部变量声明 LOCAL_VARIABLE
方法声明 METHOD
包声明 PACKAGE
参数声明 PARAMETER
类,接口(包括注解类型)或enum声明 TYPE


@Retention(RetentionPolicy.RUNTIME)

生命周期

SOURCE,CLASS,RUNTIME


@Inherited // 允许子注解继承
@Documented //生成javadoc时会包含注解 

自定义注解

元注解
public @interface 注解名
{
	定义体
}

使用自定义注解

@<注解名>(<成员名1>=<值>,<成员名2>=<值>...) //调用注解并且赋值

注解

##解析注解##

通过反射获取类,函数或成员上的运行时注解信息,从而实现动态控制程序运行时的逻辑

  1. 通过类加载器加载类

    class c = Class.forName("...")

  2. 判断注解是否存在

    c.isAnnotationPresent(注解.class)

  3. 拿到注解实例

    c.getAnnotation(注解.class)


source:

  1. imooc 全面解析java注解
  2. 竹子-博客
⚠️ **GitHub.com Fallback** ⚠️