SpringBoot自动装配

SpringBoot自动装配

最近面试经常遇到一个问题:是否了解SpringBoot的自动装配?被问的次数多了自然就开始注意到这个问题了,于是就去了解怎么实现的自动装配。

@SpringBootApplication
public class DemoJyhApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoJyhApplication.class, args);
    }

}

首先是我们进入我们的SpringBoot的启动类XxxApplication,找到@SpringBootApplication注解。

@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 {
	......
}

可以看到一个很重要的注解@EnableAutoConfiguration,翻译过来就是‘启动自动配置 ’,说明这里就是实现自动装配的核心,继续向下看。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

其中单看名字直译过来的含义的话,@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})与自动装配比较直接相关。
1、@AutoConfigurationPackage:将添加该注解的类所在的package作为自动配置的package进行管理,也就是说当SpringBoot应用启动时默认会将启动类所在的package作为自动配置的package。
2、@Import({AutoConfigurationImportSelector.class}):将需要装配的类装配到IoC容器中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

它主要是读取META-INF/spring.factories文件,经过去重、剔除排除值、过滤,返回需要装配的配置类集合。
扫描classpath下的META-INF/spring.factories文件,里面是以key=value形式存储,读取其中key=EnableAutoConfiguration,value就是需要装配的配置类,也就是getCandidateConfigurations返回的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值