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

这篇具有很好参考价值的文章主要介绍了Springboot之把外部依赖包纳入Spring容器管理的两种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Springboot之把外部依赖包纳入Spring容器管理的两种方式,Spring boot小作文,java,spring boot,自动装配,自动配置原理

Springboot之把外部依赖包纳入Spring容器管理的两种方式,Spring boot小作文,java,spring boot,自动装配,自动配置原理

前言

在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源码再深入研究一下。

Springboot之把外部依赖包纳入Spring容器管理的两种方式,Spring boot小作文,java,spring boot,自动装配,自动配置原理

第二种: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和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。

  1. Redis在Springboot中的配置类
    /**
     * Redis 配置类
     */
    @AutoConfiguration
    public class YudaoRedisAutoConfiguration {
    
        /**
         * 创建 RedisTemplate Bean,使用 JSON 序列化方式
         */
        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
            // 创建 RedisTemplate 对象
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            // 设置 RedisConnection 工厂。😈 它就是实现多种 Java Redis 客户端接入的秘密工厂。感兴趣的胖友,可以自己去撸下。
            template.setConnectionFactory(factory);
            // 使用 String 序列化方式,序列化 KEY 。
            template.setKeySerializer(RedisSerializer.string());
            template.setHashKeySerializer(RedisSerializer.string());
            // 使用 JSON 序列化方式(库是 Jackson ),序列化 VALUE 。
            template.setValueSerializer(buildRedisSerializer());
            template.setHashValueSerializer(buildRedisSerializer());
            return template;
        }
    
        public static RedisSerializer<?> buildRedisSerializer() {
            RedisSerializer<Object> json = RedisSerializer.json();
            // 解决 LocalDateTime 的序列化
            ObjectMapper objectMapper = (ObjectMapper) ReflectUtil.getFieldValue(json, "mapper");
            objectMapper.registerModules(new JavaTimeModule());
            return json;
        }
    
    }
  2. resources目录下创建/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,并填写配置类的全限定名称
    com.example.redis.config.YudaoCacheAutoConfiguration

    Springboot之把外部依赖包纳入Spring容器管理的两种方式,Spring boot小作文,java,spring boot,自动装配,自动配置原理文章来源地址https://www.toymoban.com/news/detail-620181.html

到了这里,关于Springboot之把外部依赖包纳入Spring容器管理的两种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring框架IOC容器和DI依赖注入

    IOC(Invertion Of Control):控制反转,使用对象时,由使用new创建对象转变为由外部提供对象,此过程中对象的创建控制权由程序转移到外部的思想称之为控制反转. DI(Dependency Injection):依赖注入,在容器中建立bean与bean之间的关系的过程,称之为依赖注入 pom.xml依赖引入 BookDao BookDaoImpl Book

    2023年04月09日
    浏览(89)
  • 避免IDEA新建项目自动纳入git管理

    今天遇到了个很头疼的问题:我在 gitee 上创建了新的远程仓库 test1,然后通过 IDEA 拉取到了本地。随后我打算在该目录下新建新的 module,用来做不同的事情。比如这里的 mybatis 我打算用于测试 mybatis 相关的一些类、方法等。但问题是,我每次新建 module 它都会成为一个独立的

    2024年02月16日
    浏览(59)
  • SpringBoot 依赖管理

    Spring Boot 依赖管理 在 Spring Boot 中,依赖管理是通过 Maven 或 Gradle 进行管理的。Spring Boot 提供了一种简化的方式来管理和引入依赖项,使得构建和管理项目变得更加容易。下面是一些关于 Spring Boot 依赖管理的基本信息和示例: 使用 Maven 进行 Spring Boot 依赖管理: 在 Maven 项目

    2024年02月13日
    浏览(44)
  • 【SpringBoot源码剥析】| 依赖管理

    我们创建项目时添加的依赖并没有帮我们指定版本号 version ,那SpringBoot是如何来指定版本账号的呢? 现在我们来剥析一下SpringBoot的父依赖启动器 spring-

    2024年02月04日
    浏览(43)
  • SpringBoot(依赖管理和自动配置)

    1.springboot是什么? 2.快速入门 1.需求分析 2.环境配置 1.确认开发环境 2.创建一个maven项目 3.依赖配置 pom.xml 4.文件目录 5.MainApp.java (启动类,常规配置) 6.HelloController.java (测试Controller) 7.运行启动类 8.浏览器向Conroller发送请求 3.快速入门小结 1.SpringBoot跟SSM的关系 2.pom.xml依

    2024年03月15日
    浏览(48)
  • Spring Boot项目打包及依赖管理-瘦身

    在Spring Boot项目中,通过Maven插件的配置,我们可以定制项目的打包过程,将依赖项抽取到指定的 lib 目录中。本文将演示如何使用Spring Boot Maven Plugin进行项目打包,同时抽取依赖项到 lib 目录,并提供相应的启动命令。 首先,在项目的 pom.xml 文件中,修改Spring Boot Maven Plugin的

    2024年02月22日
    浏览(50)
  • SpringBoot自动装配—简化依赖管理的利器

    在现代的软件开发中,依赖管理是一个关键的任务。随着应用程序规模的增长,手动管理对象之间的依赖关系变得越来越复杂。为了解决这个问题,Spring Boot 提供了一种强大的功能,即自动装配(Autowiring)。本文将深入探讨 Spring Boot 中的自动装配原理和使用方法,并通过具

    2024年02月05日
    浏览(32)
  • Java --- springboot3依赖管理和自动配置机制

    目录 一、依赖管理机制 二、自动配置机制  三、自动配置流程 🚕 、为什么导入 starter-web 所有相关依赖都导入进来? ①、开发什么场景,导入什么 场景启动器。 ②、maven依赖传递原则。A-B-C: A就拥有B和C ③、导入 场景启动器。 场景启动器 自动把这个场景的所有核心依赖

    2024年02月07日
    浏览(55)
  • SpringBoot 底层机制分析【Tomcat 启动+Spring 容器初始化+Tomcat 如何关联Spring 容器】【下】

    😀前言 本篇博文是关于SpringBoot 底层机制分析实现,希望能够帮助你更好的了解SpringBoot 😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉 💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客

    2024年02月13日
    浏览(45)
  • Spring Boot 整合kafka消费模式AckMode以及手动消费 依赖管理

    在pom.xml文件中导入依赖 需要自己配置AckMode时候的配置 kafka支持的消费模式,设置在 AbstractMessageListenerContainer.AckMode 的枚举中,下面就介绍下各个模式的区别 AckMode模式 AckMode模式 作用 MANUAL 当每一批poll()的数据被消费者监听器(ListenerConsumer)处理之后, 手动调用Acknowledgment

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包