简单了解spring boot注解

简介

我是2020年的一名应届毕业生,这是我踏出校园的第一份工作。进入公司的第22天,我将在博客上记录我在公司里成长,请各位技术博主多指教。

进入正题

我将从以下几个简单的方面介绍一下spring boot注解:

spring boot底层技术介绍

了解注解前,我们需要知道在spring boot使用到的底层技术主要:

  • 1.反射 在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
  • 2.注解 一种代码级别的说明,它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
  • 3.java配置 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置,他的实现主要依赖于2个注解:
    • 1.@Configuration 声明当前类是一个配置类,相当于spring配置的xml文件
    • 2.@Bean注解在方法上,声明当前方法返回值为一个Bean

为什么要使用注解,有什么好处?

  • 1.易读易懂
  • 2.注解代替xml配置
  • 3.代码简洁,条理清晰

jdk中常见的注解

注解作用
@Override重写
@Deprecated过时
@SuppressWarnings去掉警告
  • @Override 重写父类方法
  • @Deprecated 写在类上
  • @SuppressWarnings 注解 可以加在类上也可以加在方法上,加在类上全类里忽略警告,加在方法上,忽略该方法警告

注解的作用域

  • 源码注解(SOURCE)只在源码中显示,编译时丢弃(了解)
  • 编译时注解(CLASS)编译时会记录到.class文件中,运行时丢弃(了解)
  • 运行时注解(RUNTIME)运行时存在,可通过反射解析(重点)

自定义注解

  • 元注解(注解的注解)
  • 使用自定义注解
  • 反射解析注解

了解注解

  • 元注解:可以注解(动词)到注解(名词)上的注解(名词)就叫元注解,也就是说元注解的@Target必然有一个值是 ANNOTATION_TYPE
  • @Target注解表示该注解能加到哪些属性上
  • @Retention表示该注解的作用域
  • @Inherited表示允许子类继承
  • @Documented表示生成javadoc时会包含该类
  • 定义注解用@interface关键字
  • 里面的字段用 类型 名字();格式定义
  • 一般我们会给字段一个默认值,格式为:类型 名字()default 默认值;
  • 注解有一个比较特殊的字段名叫 value(); 如果注解只有一个字段,那么这个字段建议使用value(),如果使用注解时,没有指明字段名,那么默认的就是给value()赋值

反射解析注解

  • 使用反射可以解析运行时注解,根据解析的结果来确定程序的功能,其作用与解析XML没有区别
  • 要求掌握类、字段、和方法上面的注解
  • 1.解析类上面的注解
/*
 * 解析类上面的注解
 * 1.先通过反射获得该类
 * 2.判断该类上是否有指定注解类
 * 3.如果有该注解,那么就获得该注解
 * 4.获得注解里面字段的值
 */
@Test
@SuppressWarnings({ "unchecked", "rawtypes" })
public void analyticalType() throws ClassNotFoundException {
	Class class1 = Class.forName("com.fs.pojo.Book");
	boolean flag = class1.isAnnotationPresent(Introduce.class);
	if (flag) {
		Introduce introduce = (Introduce) class1.getAnnotation(Introduce.class);
		String author = introduce.author();
		String description = introduce.description();
		int value = introduce.value();
		System.out.println("author:" + author + ",decription:" + description + ",value:" + value);
	}
}
  • 2.解析方法上的注解
/*
 * 解析方法上的注解
 * 1.先通过反射获得该类
 * 2.再通过反射获得该类的方法
 * 3.判断该上方法是否有指定注解
 * 4.如果有注解,那么获得该方法上的注解
 * 5.解析获得该注解字段属性
 * 
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void analyticalMethod() throws ClassNotFoundException, NoSuchMethodException, SecurityException {
	Class class1 = Class.forName("com.fs.pojo.Book");
	Method method = class1.getMethod("show");
	boolean flag = method.isAnnotationPresent(Introduce.class);
	if (flag) {
		Introduce introduce = (Introduce) method.getAnnotation(Introduce.class);
		String author = introduce.author();
		String description = introduce.description();
		int value = introduce.value();
		System.out.println("author:" + author + ",decription:" + description + ",value:" + value);
	}
}
  • 3.解析字段上的注解,方式与解析方法一致,关键字:Field,建议学生自己写
/*
 * 解析方法上的注解
 * 1.先通过反射获得该类
 * 2.再通过反射获得该类的字段
 * 3.判断该字段上是否有指定注解
 * 4.如果有注解,那么获得该字段上的注解
 * 5.解析获得该注解字段属性
 */
@Test
@SuppressWarnings("rawtypes")
public void analyticalField() throws ClassNotFoundException, NoSuchFieldException, SecurityException {
	Class class1 = Class.forName("com.fs.pojo.Book");
	Field field = class1.getField("name");
	boolean flag = field.isAnnotationPresent(Introduce.class);
	if (flag) {
		Introduce introduce = (Introduce) field.getAnnotation(Introduce.class);
		String author = introduce.author();
		String description = introduce.description();
		int value = introduce.value();
		System.out.println("author:" + author + ",decription:" + description + ",value:" + value);
	}
}

只有一个成员的注解,强烈建议字段设置为value(),虽然设置为其他好像也没错。

加了@Inherited元注解的注解,允许子类继承其注解

  • 我们在Book类上加了注解,并设置了值
  • 我们再创建一个JavaBook类来继承Book类,没写任何东西
  • 解析JavaBook类上的注解,发现也存在注解并且值和其父类Book类一致

public class AnalyticalInherited {
	@Test
	public void analyticalInherited() throws ClassNotFoundException {
		Class class1 = Class.forName("com.fs.pojo.JavaBook");
		boolean flag = class1.isAnnotationPresent(Introduce.class);
		if (flag) {
			Introduce introduce = (Introduce) class1.getAnnotation(Introduce.class);
			String author = introduce.author();
			String description = introduce.description();
			int value = introduce.value();
			System.out.println("author:" + author + ",decription:" + description + ",value:" + value);
		}
	}
	
}

如何生成API文档

  • 选中项目–>project–>Generate javadoc–>然后看图![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mZRdmY1w-1592904325730)(B11B892D38F6415F842F36264565E8FC)]–>Document Title取个名字–>finish

  • 生成的API

这篇文章借助资料来练一下手,有什么问题请联系我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值