做公众号首图网站,引流效果最好的平台,网页设计案例代码,祖庙网站建设前言
在Spring boot项目中#xff0c;凡是标记有Component、Controller、Service、Configuration、Bean等注解的类#xff0c;Spring boot都会在容器启动的时候#xff0c;自动创建bean并纳入到Spring容器中进行管理#xff0c;这样就可以使用Autowired等注解#xff0c;…前言
在Spring boot项目中凡是标记有Component、Controller、Service、Configuration、Bean等注解的类Spring boot都会在容器启动的时候自动创建bean并纳入到Spring容器中进行管理这样就可以使用Autowired等注解在需要使用bean的业务类中进行注入。这里起到关键作用的就是ComponentScan这是一个bean扫描注解默认扫描的目录是启动类所在包下的所有包及子包也就是说凡是标记了Componetn等注解类Spring boot都会自动创建bean纳入Spring容器管理。
问题
一个问题来了是什么呢如果我封装了一套公共的业务组件也想把些组件类放到Spring容器里方便在业务里注入使用这时候应该怎么办呢
解决方法
最先想到的就是应该就是更新ComponentScan的扫描路径了吧除了这个还有没有更好方法呢答案是有的且听我细细道来的。
主要是两种方式
第一种Spring.factories
如果了解过Spring boot的自动装配的原理以及如何自定义自己的starter对这个配置文件应该会很熟悉Spring boot能够实现开箱即用省去了许多繁琐的配置spring-boot-autoconfigure.jar下的/META-INF/spring.factories配置文件起了关键作用。那个类里有什么呢仔细会发现spring.factories中配置信息是key-value的形式key是spring中预留的扩展点配置接口的全限定类名vlue则是具体的配置类的全限定类名如果有多个配置类则以英文逗号隔开
如果公共的业务组件封装好了就可以在resources目录下创建/META-INF/spring.factories配置文件并实现Spring预留的扩展点配置接口使用的时候引入到项目中然后在Spring容器启动的时候会读取classpath下所有的spring.factories中的配置类然后纳入到Spring容器中。当然这个处理过程是很复杂的这里不过多展开我在网上找到了一张图可以帮助你很好的理解整个过程有兴趣的小伙们不妨根据图上内容再结合spring源码再深入研究一下。 第二种org.springframework.boot.autoconfigure.AutoConfiguration.imports
其实org.springframework.boot.autoconfigure.AutoConfiguration.imports文件功能和Sping.factories的作用是一样的这个用法是Spring boot2.7以后出现的目的也是为引入外部的jar把外部bean纳入到Spring容器实现外部组件与Spring的集成主要的区别在于引入的方式有些不同spring.factories这种方式是在resources下创建/META-INF/spring.factories配置文件内部是key-value的形式这种则是创建/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports内部是具体的要导入到Spring环境的中的配置类。
两种方式有一些区别不过都是用来实现自动装配的。