初识Spring Boot框架之Spring Boot的自动配置
作者:_江南一点雨 发布时间:2022-08-25 10:27:57
在上篇博客初识Spring Boot框架中我们初步见识了SpringBoot的方便之处,很多小伙伴可能也会好奇这个spring Boot是怎么实现自动配置的,那么今天我就带小伙伴我们自己来实现一个简单的Spring Boot 自动配置的案例,看看这一切到底是怎么发生的。
假设我的需求是这样的:当我的项目中存在某个类的时候,系统自动为我配置该类的Bean,同时,我这个Bean的属性还可以在application.properties中进行配置,OK,就这样一个需求,我们来看看怎么实现。
1、新建starter的Maven项目
我这里以IntelliJ IDEA创建Project为例,其实很简单,创建一个Maven项目,但是注意创建的时候选择quickstart,步骤如下:
OK,这样我们就创建好一个Project了。
2.添加依赖
由于我们要使用Spring Boot的自动配置功能,所以在工程创建成功之后首先要添加Spring Boot自身的自动配置作为依赖,如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
3.属性配置
@ConfigurationProperties(prefix = "hello")
public class HelloServiceProperties {
private static final String MSG = "world";
private String msg = MSG;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
这里就是一个简单的类,和上篇博客中我们提到的 类型安全的属性获取是一致的,这里属性的值我们可以在application.properties中来直接设置,如果不设置的话默认为world。
4.判断依据类
public class HelloService {
private String msg;
public String sayHello(){
return "hello " + msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
我们一会的例子就是根据这个类是否存在来创建这个类的Bean,当然这个类也可以是第三方类库。
5.自动配置类
@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class)
@ConditionalOnClass(HelloService.class)
@ConditionalOnProperty(prefix = "hello",value = "enable",matchIfMissing = true)
public class HelloServiceAutoConfiguration {
@Autowired
private HelloServiceProperties helloServiceProperties;
@Bean
public HelloService helloService() {
HelloService helloService = new HelloService();
helloService.setMsg(helloServiceProperties.getMsg());
return helloService;
}
}
这里@ConditionalOnClass注解主要是用来判断HelloService这个类在路径中是否存在,在存在且容器中没有该类的Bean的情况下系统会自动配置需要的Bean,@ConditionalOnProperty注解则表示指定的属性要满足的条件,在helloService方法中我们则使用了HelloServiceProperties提供的参数。
6.注册配置
在resources目录下新建META-INF目录,然后在META-INF目录下创建spring.factories文件,文件内容如下,表示设置自动配置类的位置,若有多个配置类用”,”隔开即可。:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.sang.HelloServiceAutoConfiguration
正常情况下我们按步骤一创建出来的Project是没有resources这个文件夹的,在IntelliJ IDEA这个工具中,我们需要先创建一个directory,然后将之设置为resources root即可,设置方式如下:选中resources目录右键单击–》Mark Directory as–》Resource Root。
7.在项目中使用
OK,经过上面几个步骤我们的自动配置功能就算死写好了,接下来我们要在自己的项目中来使用它了,正常情况下做好自动配置类之后我们需要将之上传到 maven * 上然后直接在项目中引用,也可以将之安装到本地库,这里我选择后者的一个简化方式,直接创建Module来引用这个自动配置Module(如果小伙伴是用STS或者MyEclipse之类的开发工具直接创建新工程然后添加引用类库即可)。
创建Module方式很简单,选中刚才的Project右键单击,New一个Module,这个Module是一个SpringBoot项目(不清楚怎么创建SpringBoot项目可以查看这篇文章初识Spring Boot框架),创建成功之后选择新建的Module按F4打开Module设置,然后选择右边的加号添加依赖,如下:
然后在新建Module的pom.xml文件中添加如下依赖:
<dependency>
<groupId>org.sang</groupId>
<artifactId>org.sang.mystarter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
实际上就是我们刚刚创建的自动配置文件的坐标。然后新Module的入口类中添加如下代码:
@Autowired
private HelloService helloService;
@RequestMapping("/")
public String index(){
return helloService.sayHello();
}
使用刚刚创建的HelloService,如果需要我们可以在application.properties中添加如下配置:
hello.msg = 卖花担上看桃李, 拍酒楼头听管弦。
运行Module,然后在浏览器中访问,结果如下:
OK,这就是一个简单的自定义自动配置类。
本案例下载地址:本案例GitHub地址
来源:http://blog.csdn.net/u012702547/article/details/53750449
猜你喜欢
- 本文实例讲述了C#基于QRCode实现动态生成自定义二维码图片功能。分享给大家供大家参考,具体如下:二维码早就传遍大江南北了,总以为它是个神
- 背景我在准备使用 JVM 的命令时候观察程序的动态,但是发现 Main 函数启动就退出了,所以也没办法直接观察,于是想到了如何让 Main
- 本文实例讲述了本文章介绍了在c#,vb.net,sql中来判断指定日期是否为闰年的方法。分享给大家供大家参考。具体实现方法如下:C#代码如下
- 面试题1:说一下你对ReentrantLock的理解?ReentrantLock是JDK1.5引入的,它拥有与synchronized相同的
- 本文实例讲述了C#修改及重置电脑密码DirectoryEntry实现方法。分享给大家供大家参考。具体如下:C#修改电脑密码方法如下:///
- 本文介绍idea的安装和基本使用首先保证JDK正常安装及配置下载地址:https://www.jetbrains.com/idea/down
- 本文实例讲述了C#采用HttpWebRequest实现保持会话上传文件到HTTP的方法,在项目开发中有一定的实用价值,具体方法如下:一、前言
- 在[高并发Java 二] 多线程基础中,我们已经初步提到了基本的线程同步操作。这次要提到的是在并发包中的同步控制工具。1. 各种同步控制工具
- mybatis 3 | 参考文档MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几
- 本篇使用java自带的MessageDigest实现对文本的md5加密算法,具体代码如下: /** *@Description
- SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库。Android提供了3种操作数据的方式,SharedPrefe
- 目录Spring事件驱动源码实战在项目实际开发过程中,我们有很多这样的业务场景:一个事务中处理完一个业务逻辑后需要跟着处理另外一个业务逻辑,
- 上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格
- 前言spring-boot-actuator是一个spring-boot提供的用于监控组件,只需要在代码中加入依赖就可以了<depen
- 前言文件的上传和下载都是基于io复制,只不过文件上传是浏览器向服务器发送报文文件下载是服务器向浏览器发送报文提示:以下是本篇文章正文内容,下
- 前言我在上一篇文章聊了Redisson的分布式锁,这次继续来聊聊Redisson的公平锁。下面是官方原话:它保证了当多个Redisson客户
- 场景既然要搞懂Redis分布式锁,那肯定要有一个需要它的场景。高并发售票问题就是一个经典案例。搭建环境准备redis服务,设置redis的键
- Mybatis @SelectKey用法用处主要用来解决主键自增问题用法@SelectKey(statement="SELECT
- java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类 。在java的世界里,提供了匿名内部类语法,用于帮助大家简化代码,本文
- 背景出现了一次生产事故,事情是这样的,我们有一个项目,Java访问数据库的框架使用的是MyBatis。然后一个业务员在系统中查询了一个订单,