1. 程式人生 > >SpringBoot的@SpringBootApplication註解和其他幾個註解

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。