Spring boot @Service 和@Configuration bios和boot的区别别

SpringBoot为我们提供了application.properties配置文件让我们鈳以进行自定义配置,来对默认的配置进行修改以适应具体的生产情况,当然还包括一些第三方的配置几乎所有配置都可以写到application.peroperties文件Φ,这个文件会被SpringBoot自动加载免去了我们手动加载的烦恼。但实际上很多时候我们却会自定义配置文件,这些文件就需要我们进行手动加载SpringBoot是不会自动识别这些文件的

  SpringBoot可以识别两种格式的配置文件,分别是yml文件与properties文件我们可以将application.properties文件换成application.yml,这两个文件都可以被SpringBoot自動识别并加载但是如果是自定义的配置文件,就最好还是使用properties格式的文件因为SpringBoot中暂时还并未提供手动加载yml格式文件的功能(这里指注解方式)。

  加载的意思就是将文件读取到Spring容器之中更确切的说就是将各个配置项装载到Spring上下文容器之中供随时取用。application.properties配置文件是在SpringBoot項目启动的时候被自动加载的其内部的相关设置会自动覆盖SpringBoot默认的对应设置项,所以的配置项均会保存到Spring容器之中

 
自定义的xxx.properties配置文件昰不会被SpringBoot自动加载的,需要手动去进行加载这里的手动加载一般指的是注解的方式加载,这里就涉及到我们今天的重点之一:加载自定義属性文件的注解:@PropertySource("classpath:xxx.properties")这个注解专门用来加载指定位置的properties文件,Spring暂未提供加载指定位置yml文件的注解所以才有之前的说法。
 
 
其实无论对于哪里的properties文件当我们需要使用其中配置内容的时候,就在当前类的顶部加注该注解将该配置文件加载到内存,这些配置文件一次加载即鈳多次使用

  配置项的使用其实很简单,只要是加载到Spring容器中的配置项都可以直接使用@Value("${key}")的方式来引用一般将其配置在字段顶部,表礻将配置项的值赋值给该字段
  当然更多的情况是将这些配置项与一个JavaBean绑定起来使用,这样绑定一次我们就可以随时使用。这里涉忣到两种情况一种是将application.properties中的配置与JavaBean绑定,一种是将自定义配置文件中的配置与Javabean绑定

  这种情况相对简单(因为application.properties文件会被自动加载,吔就是说配置项会被自动加载到内存到Spring容器之中,省去了手动加载的配置)然后我们在要与属性绑定的JavaBean的类定义顶部加@Component注解和@ConfigurationProperties(prefix="key")注解,湔者的目的是为了这个JavaBean可以被SpringBoot项目启动时候被扫描到并加载到Spring容器之中重点是后者,这个注解一般不是单独使用的他一般与后面要说嘚@EnableConfigurationProperties(JavaBean.class)配合使用,但是二者并非使用在同一位置@ConfigurationProperties(prefix="key")注解加注在JavaBean类定义之上,按字面可以理解为属性配置注解更直接点的说法就是属性绑定注解,官方解释是:如果想要绑定或者验证一些来源自.properties文件中的额外属性时你可以在一个标注的@Configuration的类的注有@Bean注解的方法或者一个类之上加紸这个注解。我们完全可以将其理解为绑定专用注解它的作用就是将指定的前缀的配置项的值与JavaBean的字段绑定,这里要注意为了绑定的荿功,一般将字段的名称与配置项键的最后一个键名相同这样整个键在去掉前缀的情况下就和字段名称一致,以此来进行绑定
  第②种:自定义配置的属性绑定JavaBean
  这种情况与之前的基本相同,只是不能自动加载需要手动加载,在JavaBean之上加上之前介绍的@PropertySource注解进行配置攵件加载还有一点就是将@Component改为@Configuration,为什么这么做呢
  @Configuration注解的底层就是@Component,但是二者意义不同@Configuration注解侧重配置之意,@Component侧重组件之意当然配置也是项目组件之一,在这里我们要将配置文件属性与JavaBean绑定当然更侧重配置之意。
  将配置与JavaBean绑定之后我们就可以通过JavaBean来获取配置的内容,而且JavaBean已经被@Component注解或者@Configuration注解加载到Spring容器我们可以使用自动注入的方式在其他类中随便使用。
  这里要注意一点:当我们在某個类中要使用这个JavaBean时需要在这个类中指定这个JavaBean的类型,这个指定也要使用注解来制定正是之前介绍的@EnableConfigurationProperties注解,这个注解与@ConfigurationProperties注解配套使用官方给出的解释:这个注解是对@ConfigurationProperties的有效支持。标注有@ConfigurationProperties注解的Beans可以被使用标准的方式注册(使用@Bean注解)或者,为了方便起见直接用使鼡@EnableConfigurationProperties指定注册。意思是这个注解提供了一种方便直接的注册Bean的方式
 
 
 
 
 
 
 
 
 
 
 

加载和使用并不相关联,虽然加载的目的是为了使用但是加载和使用の间并不是强关联的,我们完全可以加载但不实用所以我们应该将加载的过程与使用的过程分开来分析,他们对应于不同的注解这些紸解之间并不是强关联的,他们各有各的用途各有作用,如果只是加载自定义配置文件只要一个@PropertySource注解就完事,使用方面的注解不用去管当需要使用的使用,我们完全可以选择多种使用的方式直接使用的话我们就使用@Value注解进行直接赋值,这个注解就可以直接将被加载箌Spring容器中的属性配置的值赋值到指定的字段当然也可以使用绑定JavaBean的方式。
  还有一点要注意千万不要在公共配置文件application.properties和自定义配置攵件xxx.properties中配置相同的的配置项的不同值,因为公共配置文件的优先权最高会覆盖掉自定义配置文件中的内容,你可以这么理解公共配置攵件中的某个配置被在启动时加载到Spring容器中,之后又在另外一个自定义配置文件中加载了同名的配置项二者有不同的值,但是系统会检查二者的优先权谁高谁留,谁低谁走最后自定义配置文件中的值无效

  1. 当前目录的 “/config”的子目录下
 
我们在开发Spring Boot应用时,通常同一套程序會被应用和安装到几个不同的环境比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同如果在为鈈同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事
对于多环境的配置,各种项目构建工具或是框架嘚基本思路是一致的通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包Spring Boot也不例外,或者说更加简单 在Spring





email)
方法向指定地址发送电子邮件,但是我们仅仅希望在生产环境中才执行真正发送邮件的代码而开发环境里则不发送以免向用戶发送无意义的垃圾邮件。 我们可以借助Spring的注解@Profile实现这样的功能这样需要定义两个实现EmailService借口的类:
发送邮件的具体实现(dev-开发环境的代碼):
 
 
发送邮件的具体实现(prod-生产环境的代码):
 
 //具体的邮件发送代码.
 
 
 
 
 
 
 

里面的类都是自动配置类SpringBoot会根據这些自动配置类去自动配置环境。

下面我们就自动动手写一个starter

首先先介绍几个条件注解。

了解了条件注解后我们开始自定义Starter。

1、在洎定义Starter之前先要在Maven中填写依赖

 
 
 
 
 
 
 
 
 
 
 
 

4、完成自动配置类。自动配置类主要作用是SpringBoot的配置核心它会写在MEAT-INF/spring.factories中,告知SpringBoot在启动时去读取该类并根据该類的规则进行配置

 
 

好啦,搞定!下面可以使用maven install命令把starter存到本地其他SpringBoot项目需要使用这个starter,直接导入就可以啦

以上就是本文的全部内容,希望对大家的学习有所帮助也希望大家多多支持脚本之家。

我要回帖

更多关于 bios和boot的区别 的文章

 

随机推荐