Sprin配置类使用、分析以及注解类的语法

马上要上手做项目了。以前都是之间导入搭好、配置好的框架直接写CRUD;但是今天在尝试手动搭建框架,进行配置信息的时候,发现如何将配置信息抽取出来,提高维护性这一操作既陌生有觉得重要,于是今天要来好好学习使用Spring中配置类的使用!

自定义注解

注解类语法:(注解生命与注解类实现)

  1. 注解类的声明部分:自定义注解类,在创建时,自动继承java.lang.annotation.Annotation接口;
public @interface test1 {
    
    

}
  1. 注解类的实现部分:不能想其他类一样书写构造;方法;属性。只能定义一个叫注解定义元素的东西。

定义注解元素需注意:

  1. 修饰符必须为public,不写默认为public;
  2. 元素的类型只能是基本数据类型:String、Class、枚举类型(被enum 修饰的类)、注解类型(体现了注解的嵌套效果)以及上述类型的一位数组;
  3. 元素的名称一般定义为名词,如果注解中只有一个元素,请把名字起为value(后面使用会带来便利操作)
  4. ()内不定义参数,这只是个固定语法
  5. defalt代表的是默认值;
  6. 如果没有默认值,后续使用注解时必须给其赋值

这里大家肯定挺奇怪的,既像是定义属性值(要么给默认属性值、要么后续使用时赋上),又像定义方法因为其打了"()"。

public @interface test1 {
    
    
    public String name();
    int age() default 18;
    int[] array();
    
}

元注解(修饰注解的注解)

注解是专门修饰注解的注解

@target

作用:限定被修饰注解应用到哪些JAVA元素上面。
该注解实现如下

public @interface Target {
    
    
    ElementType[] value();
}

注解定义的元素是枚举类型 详细定义如下:

public enum ElementType {
    
    
/***/
    /** 类,接口(包括注解类型)或枚举的声明 */
    TYPE,

    /** 属性的声明 */
    FIELD,

    /** 方法的声明 */
    METHOD,

    /** 方法形式参数声明 */
    PARAMETER,

    /** 构造方法的声明 */
    CONSTRUCTOR,

    /** 局部变量声明 */
    LOCAL_VARIABLE,

    /** 注解类型声明 */
    ANNOTATION_TYPE,

    /** 包的声明 */
    PACKAGE
    
    TYPE_PARAMETER,
    TYPE_USE,
    MODULE;

    private ElementType() {
    
    
    }
}

使用:比如让我们的注解使用在类、接口 和 方法上面;
在这里插入图片描述

@Retention

定义注解在java哪个阶段可以被使用:

  1. Java源文件阶段source:在编译和运行期间不起任何作用,等同于注解
    注解将被编译器记录在class文件中,但在运行时不会被虚拟机保留,这是一个默认的行为)-- 次注解江北编译器忽略掉
  2. 编译到class文件阶段class:编译过程中起作用;运行时JVM会忽略他。
    注解将被编译器记录在class文件中,但在运行时不会被虚拟机保留,这是一个默认的行为)
  3. 运行期阶段RUNTIME:用的最多 定义为(value = {RetentionPolicy.RUNTIME})
    注解将被编译器记录在class文件中,而且在运行时会被虚拟机保留,因此它们能通过反射被读取到

后面两个我觉得不重要了:
@Documented
@Documented注解,是被用来指定自定义注解是否能随着被定义的java文件生成到JavaDoc文档当中。

@Inherited
@Inherited注解,是指定某个自定义注解如果写在了父类的声明部分,那么子类的声明部分也能自动拥有该注解。@Inherited注解只对那些@Target被定义为ElementType.TYPE的自定义注解起作用。

使用自定义注解

public class ZhouHuer {
    
    
    @test1(name = "周胡", array ={
    
    1,2,3} )
    public void study(int times){
    
    
        for(int i =0; i<times;i++){
    
    
            System.out.println("Good good Study day day up"+i);
        }
    }
}

在使用时要给注解元素进行赋值;如果注解元素只有一个注解类型元素,而且命名为value,使用时省略value=这一过程

public @interface SecondAnnotation {
    
    
	String value();
}
//等效于@ SecondAnnotation(value = "this is second annotation")
@SecondAnnotation("this is annotation")
public class JavaBean{
    
    
	//省略实现部分
}

自定义扩展信息(实操)

目的:我们通过使用注解,反射,将配置文件中的属性赋值给类中变量;

读取yaml文件

我们的yaml文件格式为

server:
  port: 8081

首先配置绑定


总结

后面需要好好理解下枚举类型的使用

非常感谢一下几片文章的帮助:

  1. https://blog.csdn.net/xsp_happyboy/article/details/80987484跳转

Guess you like

Origin blog.csdn.net/qq_36737214/article/details/117988738