返回顶部
首页 > 资讯 > 精选 >如何在java中配置SpringBoot
  • 570
分享到

如何在java中配置SpringBoot

2023-06-15 08:06:00 570人浏览 八月长安
摘要

这期内容当中小编将会给大家带来有关如何在java中配置SpringBoot,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、Spring Boot的特点首先我们要知道 spring Boot 在底层已经为

这期内容当中小编将会给大家带来有关如何在java中配置SpringBoot,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、Spring Boot的特点

首先我们要知道 spring Boot 在底层已经为我们添加好了很多依赖。比如我们常用的Tomcat,Spring,SpringMVC这些,甚至连mysql数据库的依赖也为我们添加好了

如何在java中配置SpringBoot

不过 SpringBoot 2.5.0 使用的Mysql依赖版本是8.0.25的,如果还在使用 mysql 5 版本的小伙伴们就需要在项目的 pom.xml 文件中再次指定自己所用的依赖版本号。(因为 Maven 在引入依赖时采取就近原则,你如果指定了依赖版本号的话,它会加载离它近的,而不会去加载远的)

如何在java中配置SpringBoot

例如,我要修改 mysql 依赖的版本为5.1.43

//在当前项目里面重写配置    <properties>        <mysql.version>5.1.43</mysql.version>    </properties>

二、了解容器的功能

添加组件

@Configuration、@Bean注解

首先,这个注解是写在类上面的,告诉 spring boot 这是一个配置类,等同于 以前的配置文件

配置类里面使用@Bean标注在方法上给容器注册组件,默认情况下是单例的。以方法名就是组件的 id 。返回类型就是组件类型。返回的值,就是组件在容器中的实例

为什么他会是单例的呢? 原因是在@Configuration注解的源码中,还定义了一个属性proxyBeanMethods ,默认值是 true。

如何在java中配置SpringBoot

当然我们也可以修改他的值为false,这样他就会创建多个对象了。

举个例子:

如何在java中配置SpringBoot

我现在在配置类里面定义了一个组件,他会返回一个 User 对象,当proxyBeanMethods = true 时,无论调用多少次 user01() 方法,在容器中都只会存在一个实例对象,但我现在把它改为 false ,来测试一下他到底是不是能创建多个实例了。

在主方法中进行测试:

User user=config.user01();    User user1=config.user01();    System.out.println(user==user1);

最后输出的结果是

false

这就说明现在创建了两个对象了,在容器中useruser1并不是指向同一块内存地址

那我们什么时候可以把它改成 false 来使用呢? 这就要设计到两种编写Spring Boot的方式了

  • 一种是FULL模式 全模式(单例)

  • 另一种是Lite模式 轻量级模式(非单例)

如果有组件依赖必须使用Full模式(默认)。其他默认是否Lite模式

Import注解

加入 ioc 容器的方式有很多种,上面的@Bean是一种,这里提到的@Import也是用来注册组件的,@Import注解可以用于导入第三方包 (当然@Bean也可以)

它是写在类上面的,

如何在java中配置SpringBoot

它所创建的组件 id 默认是类的全限定名称

如何在java中配置SpringBoot

具体用法参考:b站Spring注解驱动教程

Conditional注解

条件装配:满足Conditional指定的条件,则进行组件注入

@Conditional注解下面还有许多的子注解

如何在java中配置SpringBoot

因为它的子注解实在太多了,下面我们具体实现一个例子来说明一下它的功能

先在 User 类中再加入一个 Pet 属性

如何在java中配置SpringBoot

现在我希望容器在没有 Pet 的情况下,我也不要 User 对象

要实现这个需求,可以这样做,在 User 组件前面添加@ConditionalOnBean注解,并指定条件为 Pet 组件的 id 来进行限制

如何在java中配置SpringBoot

执行测试方法

如何在java中配置SpringBoot

运行结果:

容器中是否有Tomcat:false
容器中是否有user:false

这样就对组件 User 的注册加以限制了

也可以把@ConditionalOnBean(name="tom")注解加在配置类上面,当容器中有 tom 组件时,这个类中的其他组件才会生效,否则不生效

三、原配置文件的引入

如果你原有的项目还是使用 beans.xml 等配置文件的方式来注册组件的话,SpringBoot 是肯定无法自动配置的,那怎么样才能让SpringBoot用我这个配置文件去注册组件呢?

@ImportResource注解

使用@ImportResource注解可以引入以前那种 xml 配置文件的方式写的组件

使用方法:直接加在现在的配置类上面,例如:

@ImportResource("classpath:beans.xml")

配置绑定

配置绑定是什么意思呢?其实就是使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用

具体做法:使用@ConfigurationProperties注解

这个注解是加在你需要从 properties 属性配置文件中要导入的属性的类上面。

比如:我现在写了一个 Car 类,然后在 properties 文件中写好了它的属性

如何在java中配置SpringBoot
如何在java中配置SpringBoot

( 注意:properties 文件中的所有属性均要小写,驼峰命名法也不行,可以用 - 或 _ 来代替 )

我们想要将配置文件中定义好的属性绑定到实例对象上的话,就可以在 Car 这个类上面加上@ConfigurationProperties(prefix = "mycar")prefix 代表前缀的意思。

如何在java中配置SpringBoot

单加上这一个注解还不行,因为此时容器中还没有这个对象,可以采用两种方式来把 Car 这个对象加入容器中:

使用@Component注解

使用@EnableConfigurationProperties注解

@Component+@ConfigurationProperties

@ConfigurationProperties注解上方加上@Component注解,即可将 Car 加入到容器中

测试方法:

如何在java中配置SpringBoot

运行,访问 “/car” 查看结果

如何在java中配置SpringBoot

@EnableConfigurationProperties+@ConfigurationProperties

使用@EnableConfigurationProperties注解则需要在配置类上面添加,而不是 Car 上面

如何在java中配置SpringBoot

这个注解的作用就是

开启Car的属性配置功能

把这个Car这个组件自动注册到容器中

再次运行程序,可以得到相同的结果

如何在java中配置SpringBoot

四、自动配置原理

说完上面这些,我们来看一下,Spring Boot是如何实现自动装配的

引导加载自动配置类

我们先点进@SpringBootApplication的源码中去,发现它其实是3个注解的合成注解:

  • @SpringBootConfiguration

  • @EnableAutoConfiguration

  • @ComponentScan

如何在java中配置SpringBoot 

@SpringBootConfiguration

其中,@SpringBootConfiguration的源码底层使用了@Configuration注解,说明它其实也是一个配置类,只不过它相当于是一个主配置。

@ComponentScan

根据我们之前的学习,这个注解其实就是一个组件扫描器的作用,是Spring的注解

@EnableAutoConfiguration(核心)

最关键最核心的注解就是这个,@EnableAutoConfiguration

@AutoConfigurationPackage

我们点进它的源码里面去,发现它底层调用了一个叫@AutoConfigurationPackage的注解,翻译过来就是自动配置包,它指定了默认的包规则

如何在java中配置SpringBoot

再继续查看它的底层源码,发现它导入了一个叫ReGISter的组件

如何在java中配置SpringBoot

点进去,给它打上一个断点,来看一下到底是如何运作的

如何在java中配置SpringBoot

代码现在在这里停住了,让我们来看一下这一行代码里面,发现它能够找到我们所在的包名,由此我们也就能知道为什么 Spring Boot 能够将指定的一个包下的所有组件导入进来了,

如何在java中配置SpringBoot

@Import({AutoConfigurationImportSelector.class})

@EnableAutoConfiguration注解下还有一个注解,它是干什么的呢?让我们看一下源码就知道了

如何在java中配置SpringBoot

AutoConfigurationImportSelector类下面我们找到了一个方法getAutoConfigurationEntry(annotationMetadata),它是用来给容器中批量导入一些组件的

如何在java中配置SpringBoot

给他打一个断点,看看到底加入了些什么组件进容器里

如何在java中配置SpringBoot

说明这 131 个对象都是要加入到容器中的,并且都存储在了一个List集合当中 List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes)

如何在java中配置SpringBoot

为什么会是131个呢? 其实是Spring Boot 里面写死了,一启动就要给容器中加载的所有配置类

打开spring-boot-autoconfigure-2.5.0.RELEASE.jarMETA-INF/spring.factories位置的文件,让我们来看一下源码是怎么写的

如何在java中配置SpringBoot

这里写了一大堆 xxxxAutoConfiguration 的配置类,从26行开始,到156行结束,刚好是 131 个。

如何在java中配置SpringBoot
如何在java中配置SpringBoot

虽然我们 131 个场景的所有自动配置启动的时候默认全部加载,但并不是都会生效的,比如 aop 的部分功能就需要你导入 aspectj 相关的包才能生效。它是按照条件装配规则(@Conditional),最终会按需配置。

如图, aspectj 是爆红的

如何在java中配置SpringBoot

除了AOP之外,还有一些类也是没有生效的(比如CacheAutoConfiguration),这里就不再赘述了,感兴趣的同学可以去看源码了解一下。

五、修改默认配置(约定大于配置)

SpringBoot 默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先

springMVC 中的文件上传解析器为例,他在容器中的默认名字是multipartResolver,但是我们写代码的时候可能不知道底层源码里面给他的默认名字是这个,我们给他起了另外一个名字,这个时候 SpringBoot 就会去容器中找到你所配置的那个组件,并且返回那个组件,也就是下面这段代码:

如何在java中配置SpringBoot

这是为了防止有些用户配置的文件上传解析器不符合规范。

六、总结

  • SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration

  • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定

  • 生效的配置类就会给容器中装配很多组件

  • 只要容器中有这些组件,相当于这些功能就有了

  • 定制化配置

  • 用户直接自己@Bean替换底层的组件

  • 用户去看这个组件是获取的配置文件什么值就去修改。

上述就是小编为大家分享的如何在java中配置SpringBoot了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何在java中配置SpringBoot

本文链接: https://lsjlt.com/news/279248.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何在java中配置SpringBoot
    这期内容当中小编将会给大家带来有关如何在java中配置SpringBoot,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、Spring Boot的特点首先我们要知道 Spring Boot 在底层已经为...
    99+
    2023-06-15
  • 如何在SpringBoot中配置CharacterEncodingFilter
    在Spring Boot中,可以使用配置类或者在`application.properties`文件中配置`CharacterEnc...
    99+
    2023-09-27
    SpringBoot
  • 如何在java中配置Struts2
    如何在java中配置Struts2?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Struts2的配置与简单案例:1. 创建一个dynamic web project(创建时让它...
    99+
    2023-05-31
    java struts2 ava
  • 在SpringBoot中该如何配置拦截器
    拦截器也是我们经常需要使用的,在SpringBoot中该如何配置呢 拦截器不是一个普通属性,而是一个类,所以就要用到java配置方式了。在SpringBoot官方文档中有这么一段说明...
    99+
    2024-04-02
  • 如何在SpringBoot中对Swagger进行配置
    如何在SpringBoot中对Swagger进行配置?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。导入SpringBoot集成Swagger所需要的依赖 <...
    99+
    2023-06-06
  • java springboot中如何读取配置文件的属性
    目录配置文件(1)使用注解@Value映射(2)使用@ConfigurationProperties映射(3)推荐使用:极简方式 @Bean和@ConfigurationProper...
    99+
    2024-04-02
  • 如何在Java SpringBoot项目中配置动态数据源你知道吗
    目录首先需要引入第三方依赖只需要在配置文件中按照如下配置创建如下两个数据库entitymapper.xmlmapper层Service层下面是两个测试方法下面可以来看一下测试结果:在...
    99+
    2024-04-02
  • springboot如何配置ssl
    springboot配置ssl的方法:生成证书,从ssl证书授权中心获得的。建立一个index.html到src/main/resources/static下。将这个ssl证书文件拷贝到项目根目录下。配置application.proper...
    99+
    2024-04-02
  • 如何在SpringBoot中管理多环境配置文件
    这篇文章给大家介绍如何在SpringBoot中管理多环境配置文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。可以通过配置项 spring.profiles.active 的值来激活对应的环境(思路:使用一个默认的文件...
    99+
    2023-06-15
  • 内存数据库如何在springboot中进行配置
    内存数据库如何在springboot中进行配置?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.springboot的Maven工程结构2. 首先引入依赖jar包 pom.xm...
    99+
    2023-05-31
    springboot 内存数据库
  • 如何在SpringBoot中配置ShedLock分布式定时任务
    本篇文章为大家展示了如何在SpringBoot中配置ShedLock分布式定时任务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是ShedLockShedLock是一个在分布式环境中使用的定时任...
    99+
    2023-06-15
  • Springboot中数据访问如何配置
    这篇文章给大家分享的是有关Springboot中数据访问如何配置的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。自定义数据源配置@Bean @ConfigurationProperties(prefix=...
    99+
    2023-06-22
  • springboot中如何配置多数据源
    这期内容当中小编将会给大家带来有关springboot中如何配置多数据源,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、建库建表1.1 创建数据库db1和数据库db21.2 在数据库db1中创建表db1...
    99+
    2023-06-15
  • SpringBoot如何集成Apollo配置中心
    这篇文章将为大家详细讲解有关SpringBoot如何集成Apollo配置中心,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。系统环境SpringBoot 版本:2.1.8.RELEASEApollo 版本:...
    99+
    2023-06-02
  • SpringBoot配置如何绑定
    这篇文章主要介绍“SpringBoot配置如何绑定”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot配置如何绑定”文章能帮助大家解决问题。配置绑定所谓“配置绑定”就是把配置文件中的值...
    99+
    2023-07-04
  • 如何在LinuxMint中配置
    要在Linux Mint中进行配置,您可以通过以下几种方法: 使用系统设置:Linux Mint提供了一个易于使用的系统设置工具...
    99+
    2024-04-02
  • 如何在Java中对Apollo配置进行更新
    这期内容当中小编将会给大家带来有关如何在Java中对Apollo配置进行更新,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开...
    99+
    2023-06-06
  • springboot中请求路径配置在配置文件中详解
    目录请求路径配置在配置文件中在配置文件中配置访问路径的写法改变了请求路径配置在配置文件中 原先一直使用springboot,请求路径直接写在@RequestMapping、@GetM...
    99+
    2024-04-02
  • 如何使用SpringBoot配置https
    这篇文章给大家分享的是有关如何使用SpringBoot配置https的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SpringBoot配置https(SSL证书)最近在做微信小程序,https是必须条件仅需三步S...
    99+
    2023-06-22
  • springboot线程数如何配置
    在Spring Boot应用中,可以通过以下方式配置线程池的大小:1. 使用`spring.task.execution.pool....
    99+
    2023-09-16
    springboot
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作