zoukankan      html  css  js  c++  java
  • Spring Boot自动注入原理

    启用自动注入

    使用注解@EnableAutoConfiguration开启自动注入功能。

    @EnableAutoConfiguration

    @AutoConfigurationPackage
    @Import(AutoConfigurationImportSelector.class)
    public @interface EnableAutoConfiguration {
    	// ignore...
    }
    

    @AutoConfigurationPackage

    @Import(AutoConfigurationPackages.Registrar.class)
    public @interface AutoConfigurationPackage {
    
    }
    

    Spring Boot通过AutoConfigurationImportSelector.classAutoConfigurationPackages.Registrar.class这两个类配合使用,实现动态注入。
    其中,类AutoConfigurationImportSelector.class会加载spring-autoconfigure-metadata.properties,并且进行过滤筛选,将需要动态注入的类全路径交给AutoConfigurationPackages.Registrar.class进行初始化注入。


    动态注入SpingBean

    实现bean动态注入可以通过两种方式。

    方案一:实现ImportSelector接口

    /* @author Chris Beams
     * @since 3.1
     * @see DeferredImportSelector
     * @see Import
     * @see ImportBeanDefinitionRegistrar
     * @see Configuration
     */
    public interface ImportSelector {
    
       /**
        * Select and return the names of which class(es) should be imported based on
        * the {@link AnnotationMetadata} of the importing @{@link Configuration} class.
        */
       String[] selectImports(AnnotationMetadata importingClassMetadata);
    
    }
    

    方案二:实现ImportSelector接口

    /* @author Chris Beams
     * @since 3.1
     * @see Import
     * @see ImportSelector
     * @see Configuration
     */
    public interface ImportBeanDefinitionRegistrar {
    
       /**
        * Register bean definitions as necessary based on the given annotation metadata of
        * the importing {@code @Configuration} class.
        * @param importingClassMetadata annotation metadata of the importing class
        * @param registry current bean definition registry
        */
       void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry);
    
    }
    
  • 相关阅读:
    tomcat 设置session过期时间(四种方式)
    Delphi7程序调用C#写的DLL解决办法
    delphi 获取大于2G的物理内存大小
    delphi 判断目录是否可写
    DLL编写与调用全解
    API Hook基本原理和实现
    dotnet tools 运行 dotnet run
    .NET Core & ASP.NET Core 1.0
    WebApp模版并运行
    配置系统引导启动SuperScoekt
  • 原文地址:https://www.cnblogs.com/kancy/p/12689656.html
Copyright © 2011-2022 走看看