SpringBoot的@SpringBootApplication註解和其他幾個註解
首先,我們來看看@SpringBootApplication註解程式碼,如下程式碼,它分別繼承了3個註解
1、@EnableAutoConfiguration
2、@ComponentScan
3、@SpringBootConfiguration
@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 { //..... }
所以它同時具備了@ComponentScan、@EnableAutoConfiguration的功能。
很多Spring Boot開發者總是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 註解他們的main類。 由於這些註解被如此頻繁地一塊使用(特別是你遵循以上最佳實踐時) , Spring Boot提供一個方便的 @SpringBootApplication 選擇。該 @SpringBootApplication 註解等價於以預設屬性使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 。
main應用類的位置
一般來說, main應用類應該放在其他類上面的根包(root package) 中,此時@ComonentScan註解不需要配置basePackage
屬性,這個包下的所有子包和子類都會被掃描。
下面是一個典型的結構:
cn +- zgd +- project +- Application.java | +- domain | +- Customer.java | +- CustomerRepository.java | +- service | +- CustomerService.java | +- web +- CustomerController.java
- 1
@EnableAutoConfiguration
這個註解是Spring應用程式上下文的自動配置,嘗試猜測和配置您可能需要的bean。自動配置類通常基於類路徑和定義的bean應用。例如,如果你有 tomcat-embedded.jar在您的類路徑中,你可能會想要一個TomcatEmbeddedServletContainerFactory(除非你定義自己的EmbeddedServletContainerFactory bean)。
當然我們也可能不需要他自動配置,這時候需要用排除的方式:
@Configuration
//exclude= {DataSourceAutoConfiguration.class} 通過排除屬性來禁止DataSourceAutoConfiguration的配置
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
@ComponentScan
public class Application {
.....
Spring Beans和依賴注入
你可以自由地使用任何標準的Spring框架技術去定義beans和它們注入的依賴。 這裡經常使用 @ComponentScan 註解搜尋beans, 並結合 @Autowired 構造器注入。
如果使用上面建議的結構組織程式碼(將應用類放到根包下) , 你可以新增 @ComponentScan 註解而不需要任何引數。 你的所有應用程式元件(@Component , @Service , @Repository , @Controller 等) 將被自動註冊為Spring Beans。