1 )SpringBoot主入口类
SpringBoot 主入口类如下所示,这个类的main方法就是整个springboot项目的入口。
package com.example.demo3;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Demo3Application {public static void main(String[] args) {SpringApplication.run(Demo3Application.class, args);}}
2 )@SpringBootApplication注解
SpringBootApplication注解的源码如下所示。
通过如上注解可以看出,其 @SpringBootApplication注解包含着以下三个注解。
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
其余的都是JDK内置的原注解,也就是说 @SpringBootApplication 是一个复合注解,同时拥有以上三个注解的功能。
3)@SpringBootConfiguration注解
@SpringBootConfiguration本身又是一个组合注解,其内容如下:
所以看出来,其是@SpringBootConfiguration本身包含着@Configuration注解,而只要被@Configuration标注的类,其都是配置类,所以可以得出的结论是:@Configuration实际标注着SpringBoot 的主入口类,所以入口类本身也是一个配置类。
测试入口类是一个配置类:
package com.example.demo3.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;@RestController
public class UserController {@Autowiredprivate Date date;@GetMapping("/hello")public String Hello(){return date.toString();}}
可以看出,其确实Date的类型确实被纳入到了IOC容器。
4 )@EnableAutoConfiguration
EnableAutoConfiguration它是一个启用自动配置的注解。也就是说,在默认情况下,springboot应用都会默认启动自动配置。自动配置是什么?
所谓的自动配置,就是springboot应用会去类路径当中查找class,根据类路径当中有某个类,或某些类来自动管理Bean,不需要我们自己手动配置。
举例:
springboot检测到类路径当中有SqlSessionFactory,或者application.properties文件中配置了数据,那么springboot会认为项目中有mybatis框架,因此会将mybatis中相关的bean自动的初始化,然后放到IOC容器当中,自动的将这些bean管理起来。
public static void main(String[] args) {
// SpringApplication.run(Demo3Application.class, args);ConfigurableApplicationContext applicationContext = SpringApplication.run(Demo3Application.class, args);
}
其中SpringApplication.run(Demo3Application.class, args);是有返回值的,其返回值中就可以获取到Spring的上下文对象的。其run方法返回值就是spring容器。
可以发现,其确实自动的被注入了
5)@ComponentScan
ComponentScan注解是一个负责组件扫描的注解,这个注解出现在springboot主入口类上,因此组件扫描默认扫描的包是主入口程序所在的包以及该包下的所有子包。