@EnableAutoConfiguration不扫描加载自定义META-INF

本文主要对自动配置进行一个简单的模拟,目的是为了明白自动配置的过程大概是怎么回事。以及我们自己动手写了一个小例子测试一下。

自动装配:目的就是不通过开发者 利用 @ComponentScan @EnableXXX 去加载需要的模块组件。
SpringBoot 通过 @EnableAutoConfiguration 去加载各自项目下的 META-INF/spring.factories。所有项目的:META-INF/spring.factories 在 jar 包,pom.xml 必须有相应的 jar 包导入, META-INF/spring.factories 才能被读取

@EnableAutoConfiguration 会主动读取 META-INF/spring.factories三个地方:
1、本项目的 META-INF
2、 POM.xml导入的 jar 包中的 META-INF
3、 springboot 全局 spring-boot-autoconfigure

@EnableXXX小结
@Import(类对象)
1、类对象就是模块组件类对象(@Configuration @Bean)
2 、导入接口(ImportSelector) 实现类,实现类返回模块组件对象的名称的数组

一、先写个@Configuration

@Configuration
public class PersonConfiguration {

    @Bean
    public worker getWorker() {
        return new worker();
    }

    @Bean
    public banker getBanker() {
        return new banker();
    }
}

二、写个自定义@EnableXXX

把刚才的@Configuration通过@Import导进来

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(PersonConfiguration.class)
public @interface EnablePerson {
}

三、再定义一个类来用这个注解

@Configuration
@EnablePerson
@ConditionalOnProperty( name = "person",havingValue = "true")
//@ConditionalOnClass(com.wgc.entity.live.class)
@ConditionalOnBean( name = "say" )
public class EnableAutoPerson {
}

四、自定义META-INF下的spring.factories

这是我们要告诉SpringBoot自动配置也要把我们写的组件加进来

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.wgc.config.EnableAutoBConfiguration,\
com.wgc.config.EnableAutoPerson

五、测试一下

这样我们不用扫描就能通过@EnableAutoConfiguration把我们本地的资源加载进容器使用了

@SpringBootConfiguration
@EnableAutoConfiguration
public class TestRun {

    @Bean
    public String say() {
        return "dddd say";
    }

    public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(TestRun.class)
                .web(WebApplicationType.NONE)
                .run(args);

        String book = context.getBean("mysql",String.class);
        System.out.println("book bean : =="+book);
        banker banker = context.getBean("getBanker",banker.class);
        System.out.println("banker bean : =="+banker.say());
    }
}
发布了4 篇原创文章 · 获赞 0 · 访问量 37

猜你喜欢

转载自blog.csdn.net/weixin_45189306/article/details/104832012