注意不要把springboot的配置搞错了,不管有没有这个包,都可以没有它就不会有负担。
在springboot架构中,每个源程序还需要添加一个import语句来引入其他需要包含的包。
如果你把它放在一个分类项目中,它可以不能被识别。只有放在资源项中才能识别。
该错误消息意味着没有活动的概要文件,所以只需打开配置并选择配置。
springboot核心注释@enableautoconfiguration会导入@import(),它实现了deferredimportselector接口,即可以在spring完成beans初始化后回调接口的selectimports方法。该方法的参数是每个bean的类属性和注释,返回的bean将被导入spring。自动配置importselector实现逻辑如下:
这个方法的逻辑大致是在每个jar包下加载spring.factories配置文件,读出自动配置的类,然后去掉重复的和需要排除的,然后过滤,也就是filter方法。该方法如下:
关注第一个for循环,getautoconfigurationimportfilter()将返回autoconfigurationimportfilters的所有实现类。目前只有onclass实现了这个接口,即返回onclass的所有对象。onclasscondition继承springbootcondition,match会根据条件过滤掉不合格的配置类,留下合格的配置类,由autoconfigurationimportselector注入spring完成加载。在这里,让我们让我们讨论一下match方法如何处理conditiononclass的注释,并看看实现。其中实现了getoutcomes方法,其中使用createoutcomesresolver方法创建了两个outcomesresolver。应该注意的是,一半的解析任务被留在一个新的线程中,以获得更好的性能。在这里,我们主要看一下standardoutcomesresolver的实现以及相应的实现方法:
你可以看到阅读上面的类conditionalonclass批注的值,然后将其与环境进行匹配。如果存在,则返回conditionoutcome对象,如果存在,则返回null。经过这些过滤,最终由上述的autoconfigurationimportselector类返回,并由spring加载,从而实现条件注释的配置功能。
另外,@configuration类将在configurationclasspostprocessor中处理,一些其他类型的@condition条件判断,比如onjavacondition注释,将在这里处理,所以我赢了这里不再赘述。