文章目录
一、Java注解
1.1 元注解
Java
中元注解有四个:@Retention
、@Target
、@Document
、@Inherit
@Retention
作用:保留的位置
@Retention
注解有一个属性value
,是RetentionPolicy
类型的,RetentionPolicy
有3个值:CLASS
、RUNTIME
、SOURCE
,按生命周期来划分可分为3类:
RetentionPolicy.SOURCE
:注解只保留在源文件,当Java
文件编译成class
文件的时候,注解被遗弃RetentionPolicy.CLASS
:注解被保留到class
文件,但jvm
加载class
文件时候被遗弃,这是默认的生命周期RetentionPolicy.RUNTIME
:注解不仅被保存到class
文件中,jvm
加载class
文件之后,仍然存在
这3个生命周期分别对应于:Java
源文件(.java
文件) -> .class
-> 内存中的字节码。那怎么来选择合适的注解生命周期呢?
一般如果需要在运行时去动态获取注解信息,那只能用RUNTIME
注解,比如@Deprecated
使用RUNTIME
注解;如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如Lombok
),就用CLASS
注解;如果只是做一些检查性的操作,比如@Override
和@SuppressWarnings
,使用SOURCE
注解。
@Target
作用:注解的作用目标
@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)
:包
@Document
作用:说明该注解将被包含在javadoc
中
@Inherit
作用:说明子类可以继承父类中的该注解
1.2 @Override
作用在方法上,当我们想重写一个方法时,在方法上加@Override
,当我们方法的名字出错时,编译器就会报错
1.3 @Deprecated
用来表示某个类或属性或方法已经过时,不想别人再用时,在属性和方法上用@Deprecated
修饰
1.4 @SuppressWarnings
用来压制程序中出来的警告,比如在没有用泛型或是方法已经过时的时候
1.5 @Documented
给类方法添加注释
二、SpringBoot中注解
@SpringBootApplication
SpringBoot
应用标注在某个类上说明这个类是SpringBoot
的主配置类,SpringBoot
就应该运行这个类的main方法来启动SpringBoot
应用
@SpringBootConfiguration: 标注在某个类上,表示这是一个SpringBoot
的配置类
@EnableAutoConfiguration: 开启自动配置功能
@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackages.Registrar.class)
@Import
是Spring
底层的注解,负责将组件导入到容器中。org.springframework.boot.autoconfigure.AutoConfigurationPackages.Registrar
将主配置类(@SpringBootApplication
标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring
容器
@Import({EnableAutoConfigurationImportSelector.class})
EnableAutoConfigurationImportSelector
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中。会给容器中导入非常多的自动配置类(xxxAutoConfiguration
);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
SpringBoot
在启动的时候从类路径下的META-INF/spring.factories
中获取EnableAutoConfiguration
指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们;
J2EE
的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar
;
@ConditionalOnBean是依赖,@ConditionalOnMissBean是排斥,@Conditional为条件