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主入口類上,因此組件掃描默認掃描的包是主入口程序所在的包以及該包下的所有子包。