初识Spring Boot框架之Spring Boot的自动配置

在上篇博客初识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地址

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

时间: 2017-04-11

详解MyEclipse中搭建spring-boot+mybatis+freemarker框架

1.在MyEclipse里创建一个maven项目.File>New>Maven Project: 勾选图中红色部分,然后点击Next. 2.填写下图中红色部分然后点击Finish. 3.此时一个maven项目已经生成,目录结构如下: 4.打开pom.xml在里面编辑如下内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSche

SpringBoot框架搭建教程分享

SpringBoot几乎集成了SpringMVC的所有内容,以及tomcat容器,同时去除了繁复的xml配置文件,开发起来十分方便:页面配合thymeleaf模板渲染也是非常简单,如果是前后端分离的项目,那么SpringBoot就专门负责提供restful风格的api接口,通过json格式与前端进行数据交互. 下面pom.xml里面一些依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=

Spring Boot 集成Dubbo框架实例

使用Spring Boot 与Dubbo集成,这里我之前尝试了使用注解的方式,简单的使用注解注册服务其实是没有问题的,但是当你涉及到使用注解的时候在服务里面引用事务,注入其他对象的时候,会有一些问题.于是我就果断放弃了注解了,使用的是XML,这里可能介绍的是Dubbo,但是如果使用Dubbox的话,基本上是兼容的.接下来,将说说使用XML的方式与Spring Boot在一起开发. 1.创建工程在pom.xml中加入依赖 创建工程名为: (1)springboot-dubbo-provide (2

Spring Boot 快速搭建微服务框架详细教程

前言: SpringBoot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题---习惯大于约定. Spring Boot默认使用tomcat作为服务器,使用logback提供日志记录. Spring Boot的主要优点: 为所有Spring开发者更快的入门 开箱即用,提供各种默认配置来简化项目配置 内嵌式容器简化Web项目 没有冗余代码生成和XM

详解在Spring Boot框架下使用WebSocket实现消息推送

spring Boot的学习持续进行中.前面两篇博客我们介绍了如何使用Spring Boot容器搭建Web项目以及怎样为我们的Project添加HTTPS的支持,在这两篇文章的基础上,我们今天来看看如何在Spring Boot中使用WebSocket. 什么是WebSocket WebSocket为浏览器和服务器之间提供了双工异步通信功能,也就是说我们可以利用浏览器给服务器发送消息,服务器也可以给浏览器发送消息,目前主流浏览器的主流版本对WebSocket的支持都算是比较好的,但是在实际开发中使

Spring-Boot框架初步搭建

一.简介 SpringMVC是非常伟大的框架,开源,发展迅速.优秀的设计必然会划分.解耦.所以,spring有很多子项目,比如core.context.bean.mvc等.这对知根底的人来说很简单明了,然而springmvc就是为了傻瓜式的操作而发明的.对于初学springmvc的人来说,想要入手就开发需要拷贝一连串的dependency而不知道这个是干嘛,不知道是不是少了依赖.像我刚接触springmvc的时候到处百度教程而发现各有不同,于是复制了一个又一个代码却不能自己设置,根本原因是不了解

JavaEE微框架Spring Boot深入解读

前言 spring框架作为JavaEE框架领域的一款重要的开源框架,在企业应用开发中有着很重要的作用,同时Spring框架及其子框架很多,所以知识量很广. Spring Boot:一款Spring框架的子框架,也可以叫微框架,是2014年推出的一款使Spring框架开发变得容易的框架.学过Spring框架的都知识,Spring框架难以避免地需要配置不少XMl,而使用Spring Boot框架的话,就可以使用注解开发,极大地简化基于Spring框架的开发. Spring Boot充分利用了Java

Spring Boot构建框架详解

什么Spring Boot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我的话来理解,就是spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式. 环境准备 一个比较不错的文本编辑器(例如Vim.Emacs.Sublime Text)或者IDE(Eclipse.Idea Intellij) Java环境(JDK 1.8或以

初识Spring Boot框架和快速入门

前面的铺垫文章已经连着写了六篇了,主要是介绍了spring和SpringMVC框架,小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做JavaEE开发的小伙伴们肯定也听说过"约定大于配置"这样一句话,就是说系统,类库,框架应该假定合理的默认值,而非要求提供不必要的配置,可是使用Spring或者SpringMVC的话依然有许多这样的东西需要我们进行配置,这样不仅徒增工作量而且在跨平台部署时容易出问题.OK,由于这些已经存在的问题,Spring Boot应运而

Spring Boot快速搭建Spring框架教程

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来. 它是为了解决企业应用开发的复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情. 然而,Spr

idea快速搭建spring cloud注册中心与注册的方法

spring cloud快速搭建 Spring Cloud是一个微服务框架,它基于spring boot, Spring Cloud提供的全套的分布式系统解决方案 . 首先我们使用gradle来创建: 选择JDK以及勾选Java,然后下一步 起包名已经项目名,下一步: 选择我们本地的gradle包,一直下一步,点击build.gradle并添加我们的依赖: group 'com.gaofei' version '1.0-SNAPSHOT' //gradle使用的插件 apply plugin:

Spring Boot 项目搭建教程及注解

Spring Boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者 特点: 1. 创建独立的Spring应用程序 2. 嵌入的Tomcat,无需部署WAR文件 3. 简化Maven配置 4. 自动配置Spring 5. 提供生产就绪型功能,如指标,健康检查和外部配置

Spring Boot 快速入门指南

最近因为项目的缘故,需要接触 Spring Boot,详细的介绍可以参考官方的文档,这里主要根据自己学习的实践进行简单分享.版本:1.3.6 简介 Spring 框架是非常著名的 Java 开源框架,历经十多年的发展,整个生态系统已经非常完善甚至是繁杂,Spring Boot 正是为了解决这个问题而开发的,为 Spring 平台和第三方库提供了开箱即用的设置,只需要很少的配置就可以开始一个 Spring 项目.当然,建议使用 Java 8 来进行开发. Spring Boot 实际上走的是 Se

spring boot 自定义starter的实现教程

spring boot 使用 starter 解决了很多配置问题, 但是, 他是怎么来解决这些问题的呢? 这里通过一个简单的例子, 来看一下, starter是怎么来设置默认配置的. 一. 建 starter 项目 自定义的starter, 项目命名规范是: 自定义名-spring-boot-starter 先来看一下, 我最后的目录结构 1. 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns

使用Spring Boot快速构建基于SQLite数据源的应用

为了提供一个单包易部署的服务器应用,考虑使用Spring Boot,因为其集成了Apache Tomcat,易于运行,免去绝大部分了服务器配置的步骤. 项目初始化 首先从mvn archetype:generate中选择 com.github.mkspcd:simple-webapp(或其他webapp模版) 模版生成项目结构. 更多关于maven请移步Maven - Users Centre 在pom.xml中添加parent来获取Spring Boot所需的最小依赖. <project xm

spring boot admin 搭建详解

1. Spring Boot Admin 定义 Spring Boot Admin 是针对 Spring Boot 的actuator接口进行UI美化的接口,可以方便的浏览被监控的Spring Boot项目的基本信息.详细的Health信息.JVM信息.垃圾回收信息.各种配置信息(数据源.缓存.命中率等) 2 系统搭建 server 端搭建 1.gradle中引入一下依赖 compile('de.codecentric:spring-boot-admin-server:1.5.6') compi

spring boot整合shiro安全框架过程解析

这篇文章主要介绍了spring boot整合shiro安全框架过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 题记:在学习了springboot和thymeleaf之后,想完成一个项目练练手,于是使用springboot+mybatis和thymeleaf完成一个博客系统,在完成的过程中出现的一些问题,将这些问题记录下来,作为自己的学习心得.在这先感谢群主TyCoding的Tumo项目,虽然本人实在太菜了,好些地方看不懂,但还是使我受益

利用Spring Boot操作MongoDB的方法教程

MongoDB MongoDB作为一种NoSQL数据库产品,其实已经非常著名了.去年,由于MongoDB安全认证的薄弱,上万家公司中招.虽然是一则负面新闻,但是也从侧面说明了MongoDB的流行程度. 下图是DB-Engines统计的2017年5月全球数据库引擎使用排名.从图中可以看出,mongoDB位列总榜第五,非关系数据库第一,非常靠前的排名. 我个人对mongoDB并不是非常熟悉,但是经过一段时间的了解,对mongoDB的特性还是有了一些简单的理解,这里记录一二. 首先,mongoDB作为