Spring Boot 相關核心註解
阿新 • • 發佈:2018-12-14
@SpringBootApplication
這個註解可以說是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 {
...
}
下面是其中三個比較重要的註解
@SpringBootConfiguration
看看這個註解的原始碼
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
這個註解其實只是將@Configuration再包裹了一層。本質上還是@Configuration這個註解。每一個標註了@Configuration這個註解的類都是一個Spring IOC容器的配置類,說的容易理解一點,標註了這個註解的類就相當於之前的xml檔案,而標註了這個註解的類裡面一般會有@Bean這個註解,@Bean這個註解就相當於xml檔案中的配置的每一個bean。
@Configuration
看看@Configuration這個註解的原始碼
@Target(ElementType.TYPE)
@Retention(RetentionPolicy. RUNTIME)
@Documented
@Component
public @interface Configuration {
...
}
可以看到@Component,標註了這個註解的類,會在Spring IOC容器初始化的時候去掃描
@Bean
相比於xml方式中的的這種方式。
<bean id="bean1" class="bean1.class">
<property ref="bean2" name="bean2">
</bean>
<bean id="bean2" class="bean2.class"></bean>
@Bean註解存在一個問題,如果有多個類都依賴一個類,每個需要依賴某個類的類中都要使用這個註解進行注入,就可能出現這個類多例項。當然這個問題Spring 給出的策略是沒有例項的bean進行注入,如果已經有了就返回之前的bean例項
@EnableAutoConfiguration
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
...
}
@Import
之前xml的配置檔案,往往會將不同功能的配置解除安裝不同的配置檔案中
spring-application.xml
spring-application-dubbo.xml
spring-application-database.xml
...
然後通過 引入配置,這個註解對應的就是引入配置的能力。
這個註解配合AutoConfigurationImportSelector這個類,將符合條件的@Configuration配置都注入到Spring IOC容器中
@ComponentScan
尋找標註有@Component。@Controller,@Service,@Mapping,@Repository等註解的類,將其注入IOC容器