前言在Spring boot项目中,凡是标记有@Component、@Controller、@Service、@Configuration、@Bean等注解的类 , Spring boot都会在容器启动的时候,自动创建bean并纳入到Spring容器中进行管理 , 这样就可以使用@Autowired等注解,在需要使用bean的业务类中进行注入 。这里起到关键作用的就是@ComponentScan,这是一个bean扫描注解,默认扫描的目录是启动类所在包下的所有包及子包,也就是说凡是标记了@Comp.NETn等注解类,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环境的中的配置类 。
两种方式有一些区别,不过都是用来实现自动装配的 。
MyBatis与Springboot【Springboot之把外部依赖包纳入Spring容器管理的两种方式】SpringBoot和MyBatis的集成主要也是利用了SpringBoot的自动配置特性和MyBatis的映射特性 。
在SpringBoot中,通过开启自动配置 , 系统会在ConfigurationClassPostProcessor这个BeanFactory的后置处理器中 , 读取spring.factories配置文件中的org.springframework.boot.autoconfigure.EnableAutoConfiguration,读取到所有的自动配置类进行注册 。
而对于MyBatis , 我们主要是通过MApperScan这个注解来注册Mapper 。在SpringBoot中,如果某个类使用了@MapperScan注解,那么Spring会自动扫描该类所在的包,并将扫描到的Mapper接口注册到Spring容器中 。这样,我们就可以在Service中使用@Autowired将Mapper注入,从而使用Mapper提供的方法对数据库进行操作 。
此外,SpringBoot还集成了MyBatis的别名和类型处理器 。这是通过扫描@Alias和@TypeAlias注解来实现的,它们可以帮助我们将类型进行转换,使得我们可以在MyBatis中使用更方便的类型,比如使用String代替硬编码的SQL语句 。
示例项目里也经常会用到reids , 这里举一个实例,以把redis与Springboot的集成,封装成一个starter 。
Redis在Springboot中的配置类
/** * Redis 配置类 */@AutoConfigurationpublic class RedisAutoConfiguration {/*** 创建 RedisTemplate Bean,使用 JSON 序列化方式*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {// 创建 RedisTemplate 对象RedisTemplate<String, Object> template = new RedisTemplate<>();// 设置 RedisConnection 工厂 。
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SpringBoot接口参数校验N种实用技巧大揭秘
- ps怎么可以把阴影去除,PS该怎么才可以将参考线隐藏起来
- AI时代想不被淘汰:你要更新三分之二的工作技能
- 梦见自己把车抵押了 梦见抵押有什么征兆
- 原神风场怎么用,原神南风之狮的风场怎么启动
- 客厅风水知识大全之客厅财位图解 客厅财位风水摆放以及禁忌
- 恒大歌舞团头牌白珊珊50张私密照被曝光,怪不得许老板把持不住!
- 上映6天破2.4亿,比亲爹张艺谋还猛,继贾玲之后她又带飞张小斐
- 蓝碧玺的功效与作用镶嵌宝石是否把石头寄到广州吗 蓝碧玺的功效与作用
- 雪橇怎么用 森林之子图案雪橇怎么用