文章目录

  • 1. SpringBoot概述
    • 1.1什么是SpringBoot
    • 1.2 SpringBoot的特点
  • 2. 快速入门
    • 2.1 创建工程并引入依赖
    • 2.2 编写controller
    • 2.3 启动测试
    • 2.4 优化入门程序
      • 2.4.1 添加引导类
      • 2.4.2 @SpringBootApplication
      • 2.4.3 @SpringBootConfiguration
  • 3. 默认配置原理
    • 3.1 以前的配置
    • 3.2 尝试java配置
      • 3.2.1 引入依赖
      • 3.2.2 添加jdbc.properties
      • 3.2.3 配置数据源
      • 3.2.4 测试
    • 3.3 SpringBoot的属性注入
      • 3.3.1 @Autowired注入
      • 3.3.2 构造函数注入
      • 3.3.3 @Bean方法的参数注入
      • 3.3.4 快速注入
  • 4. 总结

1. SpringBoot概述

1.1什么是SpringBoot

SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品:

人们把Spring Boot称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注于业务而非配置。

我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,就能得到一个生产级别的web工程。

1.2 SpringBoot的特点

Spring Boot 主要特征是:

  • 创建独立的spring应用程序
  • 直接内嵌tomcat、jetty和undertow(不需要打包成war包部署)
  • 提供了固定化的“starter”配置,以简化构建配置
  • 尽可能的自动配置spring和第三方库
  • 提供产品级的功能,如:安全指标、运行状况监测和外部化配置等
  • 绝对不会生成代码,并且不需要XML配置

总之,Spring Boot为所有 Spring 的开发者提供一个开箱即用的、非常快速的、广泛接受的入门体验

2. 快速入门

2.1 创建工程并引入依赖

创建一个maven项目,引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zh</groupId><artifactId>springboot</artifactId><version>1.0-SNAPSHOT</version><!-- 所有的springboot的工程都以spring父工程为父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.6.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>

为了让SpringBoot帮我们完成各种自动配置,我们必须引入SpringBoot提供的自动配置依赖,我们称为启动器。spring-boot-starter-parent工程将依赖关系声明为一个或者多个启动器,我们可以根据项目需求引入相应的启动器,因为我们是web项目,这里我们引入web启动器。
需要注意的是,我们并没有在这里指定版本信息。因为SpringBoot的父工程已经对版本进行了管理了。

这个时候,我们会发现项目中多出了大量的依赖:

这些都是SpringBoot根据spring-boot-starter-web这个依赖自动引入的,而且所有的版本都已经管理好,不会出现冲突。

2.2 编写controller

@RestController
@RequestMapping("hello")
@EnableAutoConfiguration //启动自动配置
public class Hello {@GetMapping("test1")public String test1(){return "Hello SpringBoot 1";}public static void main(String[] args) {SpringApplication.run(Hello.class,args);}
}

@EnableAutoConfiguration

开启spring应用程序的自动配置,SpringBoot基于你所添加的依赖和你自己定义的bean,试图去猜测并配置你想要的配置。比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcatSpringMVC的依赖。此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!

SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置,这些配置是否生效,取决于我们是否引入了对应库所需的依赖,如果有那么默认配置就会生效。

所以,我们使用SpringBoot构建一个项目,只需要引入所需依赖,配置就可以交给SpringBoot处理了。

2.3 启动测试


2.4 优化入门程序

2.4.1 添加引导类

通常请求下,我们在一个springboot工程中都会在基包下创建一个引导类,一些springboot的全局注解(@EnableAutoConfiguration注解)以及springboot程序的入口main方法都放在该类中。

在springboot的程序的基包下(引导类和Controller包在同级目录下),创建TestApplication.class:

@EnableAutoConfiguration//自动配置
@ComponentScan //自动扫描包 相当于`<context:component-scan />`
public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class,args);}
}

并修改HelloController,去掉main方法及@EnableAutoConfiguration:

@RestController
@RequestMapping("hello")
public class HelloController {@GetMapping("test1")public String test1(){return "Hello SpringBoot 1";}
}

测试引导类


2.4.2 @SpringBootApplication

我们现在的引导类中使用了@EnableAutoConfiguration和@ComponentScan注解,有点麻烦。springboot提供了一种简便的玩法:@SpringBootApplication注解

@SpringBootApplication
public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);}}

查看源码

发现@SpringBootApplication其实是一个组合注解,这里重点的注解有3个:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration:开启自动配置
  • @ComponentScan:开启注解扫描

2.4.3 @SpringBootConfiguration


通过这段我们可以看出,在这个注解上面,又有一个@Configuration注解。通过上面的注释阅读我们知道:这个注解的作用就是声明当前类是一个配置类,然后Spring会自动扫描到添加了@Configuration的类,并且读取其中的配置信息。而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一般我们无需自己添加。

3. 默认配置原理

3.1 以前的配置

事实上,在Spring3.0开始,Spring官方就已经开始推荐使用java配置来代替传统的xml配置了,我们不妨来回顾一下Spring的历史:

  • Spring1.0时代

    在此时因为jdk1.5刚刚出来,注解开发并未盛行,因此一切Spring配置都是xml格式,想象一下所有的bean都用xml配置,细思极恐啊,心疼那个时候的程序员2秒

  • Spring2.0时代

    Spring引入了注解开发,但是因为并不完善,因此并未完全替代xml,此时的程序员往往是把xml与注解进行结合,貌似我们之前都是这种方式。

  • Spring3.0及以后

    3.0以后Spring的注解已经非常完善了,因此Spring推荐大家使用完全的java配置来代替以前的xml,不过似乎在国内并未推广盛行。然后当SpringBoot来临,人们才慢慢认识到java配置的优雅。

有句古话说的好:拥抱变化,拥抱未来。所以我们也应该顺应时代潮流,做时尚的弄潮儿,一起来学习下java配置的玩法。

3.2 尝试java配置

java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有:

  • @Configuration:声明一个类作为配置类,代替xml文件
  • @Bean:声明在方法上,将方法的返回值加入Bean容器,代替<bean>标签
  • @Value:属性注入
  • @PropertySource:指定外部属性文件。

3.2.1 引入依赖

<dependency><groupId>com.github.drtrang</groupId><artifactId>druid-spring-boot2-starter</artifactId><version>1.1.10</version>
</dependency>

3.2.2 添加jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/leyou
jdbc.username=root
jdbc.password=123

3.2.3 配置数据源

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfiguration {@Value("${jdbc.url}")String url;@Value("${jdbc.driverClassName}")String driverClassName;@Value("${jdbc.username}")String username;@Value("${jdbc.password}")String password;@Beanpublic DataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl(url);dataSource.setUsername(driverClassName);dataSource.setDriverClassName(username);dataSource.setPassword(password);return dataSource;}
}

解读:

  • @Configuration:声明JdbcConfiguration是一个配置类。
  • @PropertySource:指定属性文件的路径是:classpath:jdbc.properties
  • 通过@Value为属性注入值。
  • 通过@Bean将 dataSource()方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。相当于以前的bean标签

然后就可以在任意位置通过@Autowired注入DataSource了!

3.2.4 测试

3.3 SpringBoot的属性注入

在上面的案例中,我们实验了java配置方式。不过属性注入使用的是@Value注解。这种方式虽然可行,但是不够强大,因为它只能注入基本类型值。

在SpringBoot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入。
新建JdbcProperties,用来进行属性注入:

@Component
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {private String url;private String driverClassName;private String username;private String password;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getDriverClassName() {return driverClassName;}public void setDriverClassName(String driverClassName) {this.driverClassName = driverClassName;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}
  • 在类上通过@ConfigurationProperties注解声明当前类为属性读取类

  • prefix="jdbc"读取属性文件中,前缀为jdbc的值。

  • 在类上定义各个属性,名称必须与属性文件中jdbc.后面部分一致,并且必须具有getter和setter方法

  • 需要注意的是,这里我们并没有指定属性文件的地址,SpringBoot默认会读取文件名为application.properties的资源文件。将jdbc中的内容粘贴到application中

    在JdbcConfiguration中使用这个属性:

  • 通过@EnableConfigurationProperties(JdbcProperties.class)来声明要使用JdbcProperties这个类的对象

  • 然后你可以通过以下方式在JdbcConfiguration类中注入JdbcProperties:

3.3.1 @Autowired注入

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {@Autowiredprivate JdbcProperties jdbcProperties;@Beanpublic DataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl(jdbcProperties.getUrl());dataSource.setUsername(jdbcProperties.getUsername());dataSource.setDriverClassName(jdbcProperties.getDriverClassName());dataSource.setPassword(jdbcProperties.getPassword());return dataSource;}
}

3.3.2 构造函数注入

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {private JdbcProperties jdbcProperties;public JdbcConfiguration(JdbcProperties jdbcProperties){this.jdbcProperties = jdbcProperties;}@Beanpublic DataSource dataSource() {// 略}}

3.3.3 @Bean方法的参数注入

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {@Beanpublic DataSource dataSource(JdbcProperties jdbcProperties) {// ...}
}

3.3.4 快速注入

事实上,如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties)中。而是直接在需要的地方声明即可:

@Configuration
public class JdbcConfiguration {@Bean// 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中@ConfigurationProperties(prefix = "jdbc")public DataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();return dataSource;}
}

直接把@ConfigurationProperties(prefix = "jdbc")声明在需要使用的@Bean的方法上,然后SpringBoot就会自动调用这个Bean(此处是DataSource)的set方法,然后完成注入。使用的前提是:该类必须有对应属性的set方法!

4. 总结

SpringBoot为我们提供了默认配置,而默认配置生效的条件一般有两个:

  • 你引入了相关依赖
  • 你自己没有配置

1)启动器

之所以,我们如果不想配置,只需要引入依赖即可,而依赖版本我们也不用操心,因为只要引入了SpringBoot提供的stater(启动器),就会自动管理依赖及版本了。

因此,玩SpringBoot的第一件事情,就是找启动器,SpringBoot提供了大量的默认启动器

2)全局配置

另外,SpringBoot的默认配置,都会读取默认属性,而这些属性可以通过自定义application.properties文件来进行覆盖。这样虽然使用的还是默认配置,但是配置中的值改成了自定义的。

因此,玩SpringBoot的第二件事情,就是通过application.properties来覆盖默认属性值,形成自定义配置。

SpringBoot初步入门相关推荐

  1. 玩转springboot:入门程序

    Spring Boot 入门 一.Spring Boot 简介 官网英文: Spring Boot makes it easy to create stand-alone, production-gr ...

  2. Shel脚本-初步入门之《03》

    Shel脚本-初步入门-Shell 脚本在 Linux 运维工作中的地位 3.Shell 脚本在 Linux 运维工作中的地位 Shell 脚本语言很适合用于处理纯文本类型的数据,而 Linux 系统 ...

  3. SpringBoot从入门到精通教程

    SpringBoot从入门到精通教程 一.来自ImportNew公众号的SpringBoot教程系列,可参考学习 SpringBoot (一) :入门篇--http://mp.weixin.qq.co ...

  4. Shel脚本-初步入门之《02》

    Shel脚本-初步入门-什么是 Shell 脚本 2.什么是 Shell脚本 当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,改程序就被称为 Shell 脚本.如果在 Shell 脚本 ...

  5. SpringBoot从入门到精通教程(二十九)- 微信企业支付集成(五分钟集成)

    需求背景 SpringBoot用法:微信企业支付集成(五分钟集成) 问题痛点 通过SpringBoot框架,集成服务端微信企业支付接口,做到下载即用(填写好相关微信支付后台相关Key信息),最快五分钟 ...

  6. C语言初步入门学习大略

    C语言的入门学 C语言初步入门 2022/11/29 01. 看前需知 02. 内容构成 03. 学习时间 04. 预定计划 05. 网站推荐 2022/12/01 01. 驱动程序是什么?和其他电脑 ...

  7. SpringBoot从入门到精通教程(三十一)- 爬虫框架集成

    需求背景 SpringBoot用法:爬虫框架集成 业务场景 以抓取"今日头条"新闻举例说明 技术点 1. 集成爬虫框架webmagic(更多了解webmagic,可以去官方地址) ...

  8. SpringBoot项目入门,使用Eclipse创建Springboot项目

    SpringBoot项目入门(Eclipse创建项目) 最近公司项目不急,所以有大把的时间来学习新的知识,最近在网上发现springBoot非常火,于是试着自己搭建一个springboot项目出来,将 ...

  9. SpringBoot从入门到精通-佟刚-专题视频课程

    SpringBoot从入门到精通-437人已学习 课程介绍 SpringBoot是企业级开发的整体整合解决方案,特别用于构建微服务应用,旨在用简单的方式让开发人员适应各种开发场景: 课程收益      ...

最新文章

  1. python套接字编程_Python套接字编程(1)——socket模块与套接字编程
  2. selenium 中装饰器作用
  3. WEB 容器、WEB服务和应用服务器的区别与联系
  4. C#学习笔记--详解委托,事件与回调函数
  5. springboot html引入js_SpringBoot-05-web开发
  6. 多元化谋定美国农业巨头-丰收节贸易会:四大粮商曲折历程
  7. Vue使用axios提交表单数据
  8. Android studio 开发中 用git实现批量忽略特定文件的方法
  9. iOS执行时工具-cycript
  10. 16篇论文、70多页PPT帮你优化深度学习模型,免费下载 | 资源
  11. Java使用IntelliJ IDEA配置Maven并管理一个webapp项目
  12. Shell函数和正则表达式
  13. 中国光伏如何规避产业风险?
  14. 美国苹果股价走势图(抢先看美股三大指数新动态)
  15. php中eregi,php eregi
  16. 2019/第十届蓝桥杯国赛/Java-B
  17. Linux nm命令详解
  18. 番茄工作法——方法(笔记)
  19. python 爬取12306数据
  20. ieee 802.3学习笔记-MII

热门文章

  1. 石墨烯区块链(1)系统架构
  2. 数学建模——逻辑回归模型Python代码
  3. 密码技术应用--AES文件加解密
  4. Linux Kernel中spinlock的设计与实现
  5. sqlmap绕过过滤的tamper脚本分类汇总
  6. 私有句柄表(内核对象,并非用户对象),全局句柄表
  7. 返回对象2(调用了拷贝构造函数)
  8. 160个Crackme037
  9. Acwing第 19 场周赛【完结】
  10. Acwing第 4 场周赛【未完结】