资讯专栏INFORMATION COLUMN

创建属于自己的 Spring Boot 自动配置

DC_er / 440人阅读

摘要:介绍这里有官方提供的演示项目和介绍本笔记也是通过官方提供的演示项目来进行讲解我们可以看到官方的项目中有三个模块和其中是演示如何使用自动配置是自动配置时的一些逻辑处理比较简单其中只有一些项目的依赖比如我们使用的

介绍

这里有官方提供的 演示项目 和 介绍.

本笔记也是通过官方提供的演示项目来进行讲解.

我们可以看到官方的项目中有三个模块, hornetq-sample-app hornetq-spring-boot-autoconfigurehornetq-spring-boot-starter.

其中 hornetq-sample-app 是演示如何使用自动配置, hornetq-spring-boot-autoconfigure 是自动配置时的一些逻辑处理, hornetq-spring-boot-starter 比较简单其中只有一些项目的依赖; 比如我们使用的自动配置是针对哪个框架, 以及框架所需要的其它第三方框架都可以放入此工程.

当然可能有人会问到我是否可以将 hornetq-spring-boot-autoconfigurehornetq-spring-boot-starter 模块, 合并到一起? 当然你也可以这样做, 但是我觉得分开的话会逼格高一些.

autoconfigure 模块重点

首先来看一下 pom 文件, 在此文件中有一个最主要的依赖.


        org.springframework.boot
        spring-boot-autoconfigure

这个依赖可牛逼了, 此依赖主要有我们要用到的注解和重要的 spring.factories 文件. 当然了此依赖中还有一些其它框架的配置.

下面我们在说一下在自动配置时, 一些重要的注解.

在这个模块中最主要的两个类 HornetQAutoConfigurationHornetQProperties. 我们在配置文件中配置的属性就会封装成 HornetQProperties 对象. 那么怎么知道我们需要哪些配置呢? 当然是使用 @ConfigurationProperties("hornetq") 注解了, 其中 hornetq 是一个前缀. 也可以使用 @Value 注解来帮我们赋值.

如:

hornetq.host="localhost"

hornetq:
    host: "localhost"
前缀可以更详细 spring.hornetq.host

接下来详细说一下 HornetQAutoConfiguration 类中的注解.

@Configuration
@AutoConfigureBefore(JmsAutoConfiguration.class)
@ConditionalOnClass({ConnectionFactory.class, HornetQJMSClient.class})
@ConditionalOnMissingBean(ConnectionFactory.class)
@EnableConfigurationProperties(HornetQProperties.class)
public class HornetQAutoConfiguration {

从上往下一个一个来, @Configuration 注解表示一个配置类.

如果我们的自动配置需要等待某个对象配置完成, 这个时候可以使用 @AutoConfigureAfter@AutoConfigureBefore 注解, 表明在指定类之后之前配置.

也可以使用 @AutoconfigureOrder 注解, 这个注解类似于 @Order, 但是它是专门给 auto-configuration 使用.

我个人觉得 @ConditionalOnClass 注解非常重要, 注解主要在 classpath 目录下存在时指定的类时, 才会解析当前配置类. 这也就是为啥我们不附加相应依赖的时候程序还可以运行的原因. 还有一个与此注解逻辑相反的注解 @ConditionalOnMissingClass 当不存在指定类的时候, 才会解析当前配置类.

@ConditionalOnMissingBean 通过实例的类型、类名、注解、昵称去查找是否存在对应的 Bean 如果存在, 则不回去解析. 还有一个与此注解逻辑相反的注解 @ConditionalOnBean 当存在指定 Bean 的时候才会去解析.

@EnableConfigurationProperties 注解是用来开启对 @ConfigurationProperties 注解配置Bean的支持.

在本类下还有一个静态内部类

@Configuration
@ConditionalOnClass(name = EMBEDDED_JMS_CLASS)
@ConditionalOnProperty(prefix = "hornetq.embedded", value = "enabled", havingValue = "true", matchIfMissing = true)
static class EmbeddedServerConfiguration {

@ConditionalOnProperty 注解能够控制某个 configuration 是否生效. 具体操作是通过其两个属性 name 以及 havingValue 来实现的, 其中 name 用来从 application.properties 中读取某个属性值, 如果该值为空则返回false; 如果值不为空, 则将该值与 havingValue 指定的值进行比较, 如果一样则返回 true; 否则返回 false. 如果返回值为false, 则该 configuration 不生效; 为 true 则生效.

value 属性和 name 属性一样都是数组, 但是不能和 name 属性同时使用.

matchIfMissing 判断当没有找到 enabled 时, 是否继续加载. 为 true 则继续加载, 否则报错.

最主要的其实还是 HornetQAutoConfiguration 类上的注解, 大家可以参考官方的项目来写一个属于自己的自动配置类.

spring.factories 文件

在文章发布后重新阅读了一下文章, 发现忘了写此文件的作用.

spring.factories 文件主要的作用就是让 Spring Boot 来自动配置相关类.

org.springframework.boot.autoconfigure.EnableAutoConfiguration=hornetq.autoconfigure.HornetQAutoConfiguration
文件路径 src/main/resources/META-INF/spring.factories

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72412.html

相关文章

  • 70 个 Spring 最常见面试题,Java 晋升必会

    摘要:容器自动完成装载,默认的方式是这部分重点在常用模块的使用以及的底层实现原理。 对于那些想面试高级 Java 岗位的同学来说,除了算法属于比较「天方夜谭」的题目外,剩下针对实际工作的题目就属于真正的本事了,热门技术的细节和难点成为了主要考察的内容。 这里说「天方夜谭」并不是说算法没用,不切实际,而是想说算法平时其实很少用到,甚至面试官都对自己出的算法题一知半解。 这里总结打磨了 70 道...

    Ashin 评论0 收藏0
  • Spring Boot 框架介绍和使用

    摘要:使用还是,根据个人喜好即可。如果错误页面也需要使用模板引擎动态生成,那么放在下面的路径。数据库自动配置嵌入式数据库如果类路径中包含或的相应包,那么就会自动配置这些嵌入式数据库的实例和数据源。 本文参考自Spring Boot文档。 Spring Boot 简介 Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot框架,它的作用很...

    Zack 评论0 收藏0
  • Spring Boot 最核心 3 个注解详解

    摘要:核心注解讲解最大的特点是无需配置文件,能自动扫描包路径装载并注入对象,并能做到根据下的包自动配置。所以最核心的个注解就是这是添加的一个注解,用来代替配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。 最近面试一些 Java 开发者,他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过。然而,当我问他们 Spring Boo...

    hzx 评论0 收藏0
  • Spring-Boot学习笔记

    摘要:学习笔记使用很容易创建一个独立运行运行内嵌容器准生产级别的基于框架的项目,使用你可以不用或者只需要很少的配置。异常消息如果这个错误是由异常引起的。错误发生时请求的路径。 Spring-Boot 1.5 学习笔记 使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot你可以不用或者只需要很...

    curlyCheng 评论0 收藏0
  • 全栈开发——动手打造属于自己直播间(Vue+SpringBoot+Nginx)

    摘要:经过琢磨,其实是要考虑安全性的。具体在以下几个方面跨域连接协议升级前握手拦截器消息信道拦截器对于跨域问题,我们可以通过方法来设置可连接的域名,防止跨站连接。 前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过。同学们都忙着找工作,我也在这里抛一份简历吧,欢迎各位老板和猎手诚邀。我们进入正题。直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一大批人,一个平台主播粗略估计就...

    e10101 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<