本文出自我的个人博客,欢迎到我的博客进行观看 ——> 原文链接
注:该文章是本人通过在BiliBili学习网站的Up主 @遇见狂神说 的教学视频(Bv1p4411P7V3)下学习之后所写的学习总结。在此衷心感谢狂神免费的教学视频!
一、什么是注解?
1、定义
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK5.0版本开始引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
2、作用
(1)不是程序本身,可以对程序作出解释
(2)可以被其他程序(如编译器)读取
3、注解与注释的区别
注解与注释不同,简单来说,注释是写给人看的,而注解不仅可以写给人看,还可以被程序所读取、识别。
4、我们常见的注解
一般我们经常能看到的注解有@Override(重写的注解),它是一个内置注解,作用是说明所注解的方法必定会重写它继承的父类中的方法。
二、内置注解
上面我们提到了其中之一,也就是@Override,除此之外,内置注解最常见的还有@Deprecated和@SuppressWarnings,@Override的作用以及解释了,下面简单解释一下另外两个注解的作用。
-
@Deprecated的作用是用于修辞方法、属性、类,表示不鼓励程序员使用这样的元素(表示该元素可能已经过时了),但是可以使用,或者存在更好的方式。(有时候在使用某些类的方法时,会发现该方法被划了一条删除线,这就是因为该方法上添加了@Deprecated注解)。
-
@SuppressWarnings简单来说就是用于镇压警告,与前面两个注解不同,它需要添加一个参数才能正确使用(有兴趣的可以百度,在此不做详细说明),添加此注解可以让指定的代码警告消失。(强迫症福利,但是不推荐)
三、元注解
元注解的作用是负责注解其他注解,Java中定义了4个标准的meta-annotaion(元注解)类型,分别是@Target,@Retention,@Documented,@Inherited。他们被用来对其他annotation(注解)类型作说明,这些元注解和它们所支持的类位于java.lang.annotation包中。
1、@Target
用于描述注解的使用范围,即被描述的注解可用于什么地方
@Target(Value=ElementType.METHOD):可注释在方法上
@Target(Value=ElementType.TYPE):可注释在类上
@Target(Value=ElementType.FIELD):可注释在字段上
…
当然,Value也可以传递一个数组,也就是说可以传递多个值,使其既可以注释在方法上,也可以注释在类上。
2、@retention
表示需要在什么级别保存该注释信息,用于描述注解的生命周期
@Retention(RetentionPolicy.SOURCE):在代码上有效
@Retention(RetentionPolicy.CLASS):直到编译时仍有效
@Retention(RetentionPolicy.RUNTIME):直到运行时仍有效
(SOURCE<CLASS<RUNTIME)
3、@Document
说明该注解将被包含在javadoc中,添加该注释就会使我们定义的注解生成在JAVAdoc中。
4、@Inherited
说明子类可以继承父类中的该注解
注:这四个注解是专门用来注解其他注解,也就是说,我们在定义注解的时候就需要在定义上注解这些注解,那么接下来让我们学习如何定义一个注解吧。
四、定义注解
定义一个注解:
@interface 注解名{定义内容}
如果注解需要参数,则可以这样定义:
@interface 注解名{
参数类型 参数名( ) default 默认值;//default表示为该参数设置一个默认值,可以不写
}
下面附上一个自定义注解的例子:
package kfy.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*在这里使用我们自定义的注解*/
public class MyTest {
@MyAnnotation(age = 22,name = "游城十代") //这里age参数必须写,那么参数由于有默认值可以写也可以不写
public void test(){}
}
/**
* 定义一个注解
* by:沐可
* 2020/7/7
*/
@Target(value={ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
//另外两个元注解可以不添加
@interface MyAnnotation{
//定义注解的参数: 参数类型 参数名();
String name() default "沐可"; //默认值是沐可
int age();
}
五、如何使用注解
通过上面几点,我们基本已经基本了解了注解的作用以及如何自定义一个注解。那么,有些人可能会问,注解有什么用呢?在哪里可以使用呢?这时就需要提到另外一个知识点——反射。我们可以把注解附加在包、类、方法、字段上,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。反射将在下一篇文章提到。
附、Springboot中常用到的注解
1、Controller层
@ResponseBody 注解
@RequestBody注解
@RequestMapping注解
@RequestParam注解
@Controller注解
2、Service层
@Service注解
@Resource注解
@Autowired注解
@Resource注解
@Value注解
3、Dao层
@Repository注解
@Query注解
4、表的映射类的相关注解(po)
@Entity注解
@Table注解
@GeneratedValue
@Transient
@Id
@Temporal
5、其他
@JsonProperty注解
@Component注解
@PostConstruct注解
@Bean注解