• SpringBoot @EnableAutoConfiguration exclude属性失效


     

    本文链接:https://blog.csdn.net/yuan_ren_sheng/article/details/81516779

    在学习SpringBoot的时候,入了不少的坑。今天学习@SpringBootApplication里面的@EnableAutoConfiguration注解的exclude属性的,加载配置中,发现了属性失效的case

    病状:exclude属性不起作用,如下:

    根治:首先我们要知道exclude这个属性的使用说明,说明exclude就是说一下这个@EnableAutoConfiguration这个注解了

    我们都知道这个注解(@EnableAutoConfiguration)是自动装配我们容器中的bean实例的,他会从你的<  classpath  >下的类中自动生成一些bean,并且加载到context中.

    看重点了,他加载的是classpath下的Bean.我么看一下springboot的源码

    看到SpringFactoriesLoader这个类会加载classpath下面的META-INF/spring.factories文件下面的所配置的所有bean

    因为SpringBoot是一个全能框架,所以他的扩展方面也是很强的。我们使用springboot的时候必然是用maven.那么如果项目要引用第三方配置,或者classpath的配置。我么通过spring.factories文件就可以实现。下面是一个小case

    两个maven项目springboot 是主要的项目。我们springboot这个项目引用dev这个项目里面的某个配置的时候。就需要将两个项目做关联。我们可以在springboot这个项目里面加入dev这个项目的maven坐标,如下:

    boot里面引用dev的坐标之后两个项目就有所关联了,现在我们引用dev里面的配置。有两种结果

    第一种:如果你的启动类和你引用的配置类在一个包底(包名一样或者在包的子包下)下,那么直接获取是没问题的因为有@ComponentScan这个注解

    第二种:就是没在一个包下,@ComponentScan这个注解也没有扫描那个包。我们就可以通过spring.factory来配置。比如在dev这个项目中:如下:

    内容是下面的这个截图同样是KEY-VALUE形式的

    这里的名字不能更改的,不然不起作用,通过这样配置然后再在springboot中引用dev的配置就可以了。到这里应该就知道为什么exclude这个属性不生效了,因为他们没有在同一个包下面@ComponentScan这个注解做了自动扫描没有扫描到这里面的bean

    加载spring.factories文件返回一个spring[]的数组会全部注入到spring ioc容器中。所以exclude这个属性是控制的spring.factories这个文件里面的注入ioc容器的bean...

    完()

  • 相关阅读:
    影像数据的裁切和保存(源代码)
    C#读取EXIF信息类多
    C#里到底怎么样才能嵌入汇编?
    using和回收资源
    两个由栈组成的队列和两个由队列组成的栈
    C解两道题
    Inside WUAIntroduction
    轮子和做轮子
    致曾经整过的"框架"
    C#动态分配一维数组和二维数组函数
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/11801359.html
Copyright © 2020-2023  润新知