title: Java注解
tags:
- java
copyright: true
comments: true
toc: true
date: 2019-03-24 18:41:51
categories: java
password:
https://www.imooc.com/learn/456
Java中的常见注解
JDK自带注解
- @Override
- @Deprecated
- @SuppressWarnings(“deprecation”)
常见第三方注解
Spring(@Autowired,@Service,@Repository…),Mybatis(@InsetProvider,@UpdateProvide…)…
自定义注解
Description.java
1 | import java.lang.annotation.*; |
- @interface表示是定义注解
- 成员必须以无参无异常方式声明;可通过defalut给出默认值
- 成员的类型是受限制的,只能是基本类型、String、Class、Annotaion、Enumeration
- 如果注解只有一个成员,成员名称必须为value(),在使用时可忽略成员名和赋值号
- 注解类可以没有成员,没有成员的注解称为标识注解
元注解:注解的注解
- @Target:表示注解的作用域,如ElementType.METHOD-方法,ElementType.TYPE-类,接口
- @Retention:生命周期,如:SOURCE(只在源码显示)、CLASS(编译时记录到class中,运行时忽略)、RUNTIME(运行时存在,可通过反射读取)
- @Inherited:表示允许子注解继承,此继承表示子类如果没有自定义此注解的话会继承父类的注解信息(类注解信息)
- @Documented:表示生成Javadoc时包含注解的信息
使用自定义注解的语法:
1 | @注解名(成员名1=成员值1,成员名2=成员值2,...) |
注解的分类
按照运行机制
- 源码注解:注解只在源码存在,编译成.class文件就没有了
- 编译时注解:注解在源码和.class文件中都存在,上面JDK自带注解就属于这一类
- 运行时注解:在运行阶段还起作用,设置会影响程序的运行逻辑,如@Autowired
解析注解
通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑
1 | package com.anno.test.demo; |
解析
1 | try { |
项目实战
Hibernate注解生成sql的模仿:
- 表注解
1 | package com.anno.test.demo; |
- 字段注解
1 | package com.anno.test.demo; |
- 实体类
1 | package com.anno.test.demo; |
- 调用
1 | public static void testAnno() throws Exception { |