springboot(1.java注解 && 2.springboot入门 && 3.视图渲染freemarker)

这篇博客详细介绍了Java注解的定义、分类、元注解以及自定义注解的使用,并结合实际示例进行解析。接着讲解了SpringBoot的简介、开发示例、常用注解以及配置文件。最后,讨论了Freemarker模板引擎的原理、优点,以及如何在SpringBoot中整合并进行视图渲染。
摘要由CSDN通过智能技术生成

一.java注解 

目录:

  • 1. 什么是java注解
  • 2. java注解的分类
    • 2.1 JDK基本注解
    • 2.2 JDK元注解
    • 2.3 注解与反射机制
  • 3. 自定义注解
    • 3.1 自定义注解语法
    • 3.2 自定义注解示例
      • 3.2.1 定义注解
      • 3.2.2 拦截器
      • 3.3.3 使用注解
      • 3.3.4 测试
  • 附录:

1. 什么是java注解


Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。

2. java注解的分类


2.1 JDK基本注解


例如:
@Override 复写方法
@Deprecated 过时的方法,不建议使用,但目前仍然支持,后期版本可能删除
@SuppressWarnings(value = "unchecked") 压制编辑器警告

2.2 JDK元注解


元注解用于修饰其他的注解

@Retention:定义注解的保留策略

注解 作用
@Retention(RetentionPolicy.SOURCE) 注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,请注意,当注解未定义Retention值时,默认值是CLASS,如Java内置注解,@Override、@Deprecated、@SuppressWarnning等
@Retention(RetentionPolicy.RUNTIME) 注解会在class字节码文件中存在,在运行时可以通过反射获取到

@Target:指定被修饰的Annotation可以放置的位置(被修饰的目标)

注解 作用
@Target(ElementType.TYPE) 接口、类
@Target(ElementType.FIELD) 属性
@Target(ElementType.METHOD) 方法
@Target(ElementType.PARAMETER) 方法参数
@Target(ElementType.CONSTRUCTOR) 构造函数
@Target(ElementType.LOCAL_VARIABLE) 局部变量
@Target(ElementType.ANNOTATION_TYPE) 注解
@Target(ElementType.PACKAGE)

可以指定多个位置:如@Target({ElementType.METHOD, ElementType.TYPE}),也就是此注解可以在方法和类上面使用

@Inherited:指定被修饰的Annotation将具有继承性,但这并不是真的继承,只是通过使用@Inherited,可以让子类Class对象使用getAnnotations()获取父类被@Inherited修饰的注解
@Documented:指定被修饰的该Annotation可以被javadoc工具提取成文档.

注:根据Annotation中是否包含成员变量,Annotation可以分为:标记Annotation(无成员变量), 元数据Annotation(有成员变量)。

2.3 注解与反射机制


通过使用AnnotatedElement接口中的方法提取注解中的数据,Class/Constructor/Field/Method/Package这些类都实现了AnnotatedElement接口。
注意:只有当定义Annotation时使用了@Retention(RetentionPolicy.RUNTIME)修饰,JVM才会在装载class文件时提取保存在class文件中的Annotation,该Annotation才会在运行时可见,这样我们才能够解析

主要方法:

返回值 方法名 作用
<A extends Annotation> getAnnotation(Class<T> annotationClass) 返回该程序元素上存在的、指定类型的注释,如果该类型的注释不存在,则返回null
Annotation[] Annotation[] getAnnotations() 返回该程序元素上存在的所有注释
boolean boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false
Annotation[] getDeclaredAnnotations() 返回直接存在于此元素上的所有注解,注意,不包括父类的注解,调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响,没有则返回长度为0的数组

3. 自定义注解


3.1 自定义注解语法


示例:

//定义注解具有集成性
@Inherited

//保留策略为运行时
@Retention(RetentionPolicy.RUNTIME)

//可以用在方法和类型上
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Tag {
    
    //成员变量
     String name() default "rose";
     
     String description() default "beautiful girl";
}

3.2 自定义注解示例


本例通过自定义的注解类来实现一个简单的日志打印功能。用于演示自定义注解的基本用法。

3.2.1 定义注解

3.2.2 拦截器

使用拦截器对注解进行处理:

3.3.3 使用注解

定义一个使用注解的方法:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值