我们看一下SpringBoot核心注解的一个介绍,其实我们之前在SpringBoot当中呢,我们用过这些注解了,
只是我们没有去说一下每个注解的详细含义,那么我们在这里把它补齐,我们打开我们的代码,我们看哪个呢,
启动类开始,我们看一下启动类这里,加一个@SpringBootApplication的注解,我们先把他加进来,到底是干嘛用的,
其实就是标记为你当时在哪个类上加了注解了,表示当前类是SpringBoot的一个启动类,代表的是SpringBoot的启动类,
那么启动类在启动的过程当中,要做很多事,那他在启动当中要做什么事呢,我们再看,我们打开这个注解,我们点开,看看
他的源码,在这个注解当中呢
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
他又被这么多注解所修饰,所定义,换句话说,我这里所修饰的注解,都具备这个特点的,注解Annotation的一个特点,
那么在SpringBootApplication注解上,有这么多注解,一个是@SpringBootConfiguration,
还有一个是@EnableAutoConfiguration,还有一个@ComponentScan,这三个是我们所关心的,先来看一下
@SpringBootConfiguration,这个注解是干嘛用的,我们点开他看一下,
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
在这个注解当中呢,它是一个空的,什么都没有,但是关键是,他被另一个注解所定义了,就是这个@Configuration,
这个注解是非常重要的,其实SpringBootConfiguration,具备了@Configuration的能力了,那么这个注解是非常重要的一个
注解,其实我们就可以注意一下,SpringBootConfiguration的作用就是,通过ben对象来获取配置信息,之所以他具备这个能力,
是因为他被@Configuration修饰了,这个注解是什么呢,通过bean对象完成或者获取配置信息的能力其实是@Configuration的,
这个大家对他并不陌生,它是在Spring3.0以后的一个注解,这个注解最大的特点是,来代替我们的XML配置文件,通过对bean对象
的操作,替代spring中的xml文件,所以我们在讲SpringBoot的时候,我们也用过这个注解@SpringBootConfiguration,
然后你哪个类加上了@SpringBootConfiguration了,都会对这个类的内容做一个触发,我们当时使用@Configuration和@Bean注解,
大家应该有印象,所以这个注解是非常重要的,所以正因为有这个注解的存在,我们的配置文件当中,
就没有了xml文件,@Configuration一个介绍,这样我们就把SpringBootConfiguration讲完了,
我们再来看@EnableAutoConfiguration,这个注解干嘛用的呢,我们点开他的源码看一下
@SuppressWarnings("deprecation")
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
在这里他有一个@AutoConfigurationPackage,然后里面还有其他的,我就不往下看了,这里直接解释一下注解的作用,这个注解的
作用其实就是根据当前项目所导入的jar包,我们的项目当中是一个maven项目,导入了一些jar包,它会根据我们所导入的jar包,
创建我们项目的启动环境,举个例子,我们这里不是导入了一个WEB启动器吗,我们都知道boot中的WEB启动器,包含了MVC信息的,
但是我们现在并没有对MVC配置的配置文件,包括组件扫描,还有web.xml里面配置dispatcherServlet,这些我们都没有,那么都没有
这些信息怎么去配置的呢,其实就是通过EnableAutoConfiguration来完成的,在这里会根据我们的需要,根据我们的jar包结构,
来对我们的WEB环境做一个初始化的,所以这个EnableAutoConfiguration的作用呢,就是帮我们初始化一个WEB环境,完成一些初始化
环境的配置,这个是EnableAutoConfiguration的作用,我们再打开看,这个@ComponentScan
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
这个注解的作用干嘛的呢,不用在往上看了,我们说一下这个注解的作用,其实这个注解就比较简单了,就是完成Spring的组件扫描,
他来替代什么呢,替代我们之前在XML文件中,配置组件扫描的配置,还记得那个配置吗,我们需要用到一个context命名空间下的,
然后有一个component-scan,然后package等于一个包名,然后他会根据包来做组件的扫描,那么这一个配置呢,
<context:component-scan base-package="" />
所以也就有他这样一个注解的存在,所以我们也不需要配置文件了,也不需要在配置文件里去配他了,所以这些注解就构成了
我们SpringBoot在启动时一些核心配置的支持,所以我们的SpringBoot你会发现SpringBoot项目当中,Spring配置文件
一个都不用了,原因就是这些注解的一个作用,才能出现这个效果,这是根配置相关的一些注解,我们通过名字也能看到
他的一些含义,在这里我们再来介绍一个注解,比如说这个Controller,我们用到了一个@RestController的注解,
我们点开他来看一看,其实你会发现这个注解是非常简单的,它是被两个注解所定义
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
一个是@Controller,一个是@ResponseBody,Controller不用说了,我们用过SpringMVC的都知道,表示的是一个处理单元,
处理器或者是控制器,然后@ResponseBody呢,表示你当前的返回都是以一个JSON的格式,来做一个响应,所以把这两个注解都
耦合到RestController里,如果你的Controller被RestController所修饰,首先你这个类是Controller,然后下面所有的方法
都会以JSON的数据返回,就是我们这里为什么加了RestController,就是我们方法不用加ResponseBody的一个原因,所以原因就是
在这,他的这两个注解里包含了这两个注解,他有两个特点,第一个表示是一个Controller,表示当前的这个Controller下所有的方法
都会以JSON的格式响应,所以这个注解理解起来也是比较简单的,那么我们目前涉及的一些核心注解呢,就是这一块,其实最关键的
就是启动类里的注解,可以花点时间看一看,也不是什么太难的事,其实我们主要是对之前的SpringBoot做一个补充,看一看源代码,
相信大家自己也可以通过源代码看出里面的特点