当前位置:首页 > 科技  > 软件

Springboot之把外部依赖包纳入Spring容器管理的两种方式

来源: 责编: 时间:2023-11-08 09:10:03 353观看
导读前言在Spring boot项目中,凡是标记有@Component、@Controller、@Service、@Configuration、@Bean等注解的类,Spring boot都会在容器启动的时候,自动创建bean并纳入到Spring容器中进行管理,这样就可以使用@Autowired等注解

前言

在Spring boot项目中,凡是标记有@Component、@Controller、@Service、@Configuration、@Bean等注解的类,Spring boot都会在容器启动的时候,自动创建bean并纳入到Spring容器中进行管理,这样就可以使用@Autowired等注解,在需要使用bean的业务类中进行注入。这里起到关键作用的就是@ComponentScan,这是一个bean扫描注解,默认扫描的目录是启动类所在包下的所有包及子包,也就是说凡是标记了@Componetn等注解类,Spring boot都会自动创建bean纳入Spring容器管理。FOv28资讯网——每日最新资讯28at.com

问题

一个问题来了,是什么呢?如果我封装了一套公共的业务组件,也想把些组件类放到Spring容器里,方便在业务里注入使用,这时候应该怎么办呢?FOv28资讯网——每日最新资讯28at.com

解决方法

最先想到的就是,应该就是更新@ComponentScan的扫描路径了吧,除了这个还有没有更好方法呢?答案是有的,且听我细细道来的。FOv28资讯网——每日最新资讯28at.com

主要是两种方式:FOv28资讯网——每日最新资讯28at.com

第一种:Spring.factories

如果了解过Spring boot的自动装配的原理以及如何自定义自己的starter,对这个配置文件应该会很熟悉,Spring boot能够实现开箱即用,省去了许多繁琐的配置,spring-boot-autoconfigure.jar下的/META-INF/spring.factories配置文件起了关键作用。那个类里有什么呢?仔细会发现spring.factories中配置信息是key-value的形式,key是spring中预留的扩展点配置接口的全限定类名,vlue则是具体的配置类的全限定类名,如果有多个配置类,则以英文逗号隔开;FOv28资讯网——每日最新资讯28at.com

如果公共的业务组件封装好了,就可以在resources目录下,创建/META-INF/spring.factories配置文件,并实现Spring预留的扩展点配置接口,使用的时候引入到项目中,然后在Spring容器启动的时候,会读取classpath下所有的spring.factories中的配置类,然后纳入到Spring容器中。当然这个处理过程是很复杂的,这里不过多展开,我在网上找到了一张图,可以帮助你很好的理解整个过程,有兴趣的小伙们,不妨根据图上内容,再结合spring源码再深入研究一下。FOv28资讯网——每日最新资讯28at.com

图片图片FOv28资讯网——每日最新资讯28at.com

第二种: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环境的中的配置类。FOv28资讯网——每日最新资讯28at.com

两种方式有一些区别,不过都是用来实现自动装配的。FOv28资讯网——每日最新资讯28at.com

mybatis与Springboot

SpringBoot和MyBatis的集成主要也是利用了SpringBoot的自动配置特性和MyBatis的映射特性。FOv28资讯网——每日最新资讯28at.com

在SpringBoot中,通过开启自动配置,系统会在ConfigurationClassPostProcessor这个BeanFactory的后置处理器中,读取spring.factories配置文件中的org.springframework.boot.autoconfigure.EnableAutoConfiguration,读取到所有的自动配置类进行注册。FOv28资讯网——每日最新资讯28at.com

而对于MyBatis,我们主要是通过MapperScan这个注解来注册Mapper。在SpringBoot中,如果某个类使用了@MapperScan注解,那么Spring会自动扫描该类所在的包,并将扫描到的Mapper接口注册到Spring容器中。这样,我们就可以在Service中使用@Autowired将Mapper注入,从而使用Mapper提供的方法对数据库进行操作。FOv28资讯网——每日最新资讯28at.com

此外,SpringBoot还集成了MyBatis的别名和类型处理器。这是通过扫描@Alias和@TypeAlias注解来实现的,它们可以帮助我们将类型进行转换,使得我们可以在MyBatis中使用更方便的类型,比如使用String代替硬编码的SQL语句。FOv28资讯网——每日最新资讯28at.com

示例

项目里也经常会用到reids,这里举一个实例,以把redis与Springboot的集成,封装成一个starter。FOv28资讯网——每日最新资讯28at.com

Redis在Springboot中的配置类FOv28资讯网——每日最新资讯28at.com

/** * Redis 配置类 */@AutoConfigurationpublic class RedisAutoConfiguration {    /**     * 创建 RedisTemplate Bean,使用 JSON 序列化方式     */    @Bean    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {        // 创建 RedisTemplate 对象        RedisTemplate<String, Object> template = new RedisTemplate<>();        // 设置 RedisConnection 工厂。 
                

本文链接:http://www.28at.com/showinfo-26-17638-0.htmlSpringboot之把外部依赖包纳入Spring容器管理的两种方式

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 在Javascript中为什么 0.1+0.2 不等于0.3 ? 源代码详细解析

下一篇: CSS这几个函数很实用,也很简单

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾&ldquo;低价&rdquo;口号。而过去与他们错位竞争的拼多多,靠
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 疑似小米14外观设计图曝光:后置相机模组变化不大

    下半年的大幕已经开启,而谁将成为下半年手机圈的主角就成为了大家关注的焦点,其中被传有望拿下新一代骁龙8 Gen3旗舰芯片的小米14系列更是备受大家瞩
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top