回顾注解
==什么是元注解?==
元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。它的作用和目的就是给其他普通的标签进行解释说明的。
Retention 的英文意为保留期的意思。当 @Retention
应用到一个注解上的时候,它解释说明了这个注解的的存活时间。
它的取值如下:
- RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
- RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
- RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
==@Documented有什么用?==
@Documented 保存到javadoc
顾名思义,这个元注解肯定是和文档有关。它的作用是能够将注解中的元素包含到 Javadoc 中去。(Javadoc用于描述类或者方法的作用)
==@Target 限定使用场景== Target 是目标的意思,@Target 指定了注解运用的地方。当一个注解被 @Target 注解时,这个注解就被限定了运用的场景。类比到标签,原本标签是你想张贴到哪个地方就到哪个地方,但是因为 @Target 的存在,它张贴的地方就非常具体了,比如只能张贴到方法上、类上、方法参数上等等。
@Target 有下面的取值:
- ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
- ElementType.CONSTRUCTOR 可以给构造方法进行注解
- ElementType.FIELD 可以给属性进行注解
- ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
- ElementType.METHOD 可以给方法进行注解
- ElementType.PACKAGE 可以给一个包进行注解
- ElementType.PARAMETER 可以给一个方法内的参数进行注解
- ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
==@Inherited 注解继承==
Inherited 是继承的意思,它的意思是@Inherited注解了B注解,B再注解别人,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解,代码来解释。
@Inherited@Retention(RetentionPolicy.RUNTIME)@interface Test {}@Testpublic class A {}public class B extends A {}
注解 Test 被 @Inherited 修饰,之后类 A 被 Test 注解,类 B 继承 A,类 B 也拥有 Test 这个注解。
@SpringBootConfiguration
这是注解@SpringBootConfiguration的源码,因为@Inherited注解
所以@SpringBootApplication注解的类继承了这个超类的三个注解@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
之后我们在分别看这三个注解
原来@SpringBootConfiguration是@Configuration是用来表示类为配置类的
@ComponentScan
Spring部分就学过,是知道扫描哪些,spring注解
@EnableAutoConfiguration
EnableAutoConfiguration的目的是启动SpringBoot的自动配置机制。
@AutoConfigurationPackage
:自动配置包@Import
:给IOC容器导入组件
@AutoConfigurationPackage
我们可以发现,依靠的还是@Import
注解,再点进去查看,我们发现重要的就是以下的代码:
它的作用就是在默认的情况下将主配置类(@SpringBootApplication
)的所在包及其子包里边的组件扫描到Spring容器中。
==这个扫描的和Component扫描的对象不同==
比如说,你用了Spring Data JPA,可能会在实体类上写
@Entity
注解。这个@Entity
注解由@AutoConfigurationPackage
扫描并加载,而我们平时开发用的@Controller/@Service/@Component/@Repository
这些注解是由ComponentScan
来扫描并加载的。
@Import(AutoConfigurationImportSelector.class)
使用Import自动导入所有符合自动配置条件的Bean定义并加载到IOC容器
总结
- pringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
- 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定
- 生效的配置类就会给容器中装配很多组件
- 只要容器中有这些组件,相当于这些功能就有了
- 定制化配置
- 用户直接自己@Bean替换底层的组件
- 用户去看这个组件是获取的配置文件什么值就去修改。
开发小技巧
lombok
lombok能简化JavaBean的开发
在pom文件里添加依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
并在idea中下载插件
以前的getset方法我们不用写了,通过注解@Data,它就可以在编译的时候自动生成getset方法了
@NoArgsConstructor//为JavaBean添加无参构造@AllArgsConstructor//为JavaBean添加有参构造@Data@ToStringpublic class Pet { private String name;}
==Slf4j==
简化日志开发
添加@Slf4j注解既有此功能
dev-tools
项目或者页面修改以后:Ctrl+F9;
修改后的页面效果就会立马显示出来
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
Spring Initailizr
==这个功能能帮我们快速构建SpringBoot项目==
如下:
选中想要开发的项目需要的组件
目录结构直接给我们创建好了,而且SpringBoot的启动程序也写好了
我们只需要关注逻辑代码即可~