1. 程式人生 > >Spring Boot 相關核心註解

Spring Boot 相關核心註解

@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容器