美文网首页
如何进行自动装配?

如何进行自动装配?

作者: 嘘寒问暖 | 来源:发表于2022-08-27 23:32 被阅读0次

如何进行自动装配?

完成Spring Boot约定的组件自动装配需要包含三个因素:

激活@EnableAutoConfiguration注解(全流程管理)

配置/META-INF/spring.factories(约定,是否将组件下某个class加入自动装配管理)

实现xxxAutoConfiguration组件配置类(符合什么条件才加入自动装配)

整体流程是@EnableAutoConfiguration中实现类扫描“classpath下即pom依赖”中所有包含/META-INF/spring.factories的包,并根据xxxAutoConfiguration和/META-INF/spring-autoconfigure-metadata.properties中的条件判断来决定是否进行自动装配。

SpringBootApplication是一组注解的组合,其中包含@EnableAutoConfiguration注解。

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

而根据@Enable模块驱动设计模式(即Import的类被@Configuration注解或实现ImportSelector接口,可实现注入)@EnableAutoConfiguration必然Import了“实现ImportSelector接口的实现类”,并实现其SelectImport方法。

// 1. Import了AutoConfigurationImportSelector类

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@AutoConfigurationPackage

@Import(AutoConfigurationImportSelector.class) 

public @interface EnableAutoConfiguration {

}

//2. 实现了DeferredImportSelector接口,并重写selectImports方法

public class AutoConfigurationImportSelector

implements DeferredImportSelector, BeanClassLoaderAware, ResourceLoaderAware,

BeanFactoryAware, EnvironmentAware, Ordered {

}

//3. 继承ImportSelector接口

public interface DeferredImportSelector extends ImportSelector {}

整体流程:

获取自动加载配置的元数据:主要是获取classpath下所有META-INF/spring-autoconfigure-metadata。properties中的配置信息,文件里面配置的作用等同于在xxxAutoConfiguration上面的@ConditionalOnClass等注解,这么做的好处就是参考官网说明。(Spring Boot uses an annotation processor to collect the conditions on auto-configurations in a metadata file (META-INF/spring-autoconfigure-metadata.properties). If that file is present, it is used to eagerly filter auto-configurations that do not match, which will improve startup time.)

相关文章

  • Spring之旅(三):Spring 装配

    Bean装配 bean装配有哪几种方式 如何使用javaConfig进行显示装配 如何使用自动化装配 什么是装配 ...

  • 如何进行自动装配?

    如何进行自动装配? 完成Spring Boot约定的组件自动装配需要包含三个因素: 激活@EnableAutoCo...

  • spring自动装配的五种方式

    1.no默认不进行自动装配,通过显性设置ref属性来进行装配 2.byName通过参数名进行自动装配,Spring...

  • Spring中自动装配的方式有哪些?

    no:不进行自动装配,手动设置Bean的依赖关系。 byName:根据Bean的名字进行自动装配。 byType:...

  • 解释不同方式的自动装配 。

    有五种自动装配的方式,可以用来指导Spring容器用自动装配方式来进行依赖注入。 no:默认的方式是不进行自动装配...

  • Spring装配Bean

    spring三种方式装配bean: 自动化装配bean 借助java来进行bean装配 使用xml进行bean装配...

  • 解释不同方式的自动装配 。

    解释不同方式的自动装配。 有五种自动装配的方式,可以用来指导Spring容器用自动装配方式来进行依赖注入。 no:...

  • 3.7 自动装配 bean

    Spring 支持五种自动装配模式。 byName模式: 当使用 byName模式进行自动装配时, Spring会...

  • Spring回顾——自动装配模式

    Spring 支持五种自动装配模式: byName模式:在使用byName模式进行自动装配时,Spring会尝试用...

  • Java面试笔试题大汇总四

    151、Spring中自动装配的方式有哪些? 答: - no:不进行自动装配,手动设置Bean的依赖关系。 - b...

网友评论

      本文标题:如何进行自动装配?

      本文链接:https://www.haomeiwen.com/subject/lcchnrtx.html