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

发布了126 篇原创文章 · 获赞 75 · 访问量 13万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览