前些天栈长在Java技术栈微信公众号分享一篇文章:Spring Boot 面试,一个问题就干趴下了!,看到大家的留言很精彩,特别是说"约定大于配置"的这两个玩家。

哈哈,上墙的朋友开不开森?

不错,约定优(大)于配置确实是 Spring Boot 整个框架的核心思想。

那么怎么理解约定优于配置呢?

百度百科定义:

约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。

总结就是两点:

1、约定一些推荐的默认配置;

2、开发人员只需要规定不符约定的部分;

这样做的好处就是,如果约定的默认配置符合我们的要求,省略即可,反之,再进行额外配置。

从 Spring Boot 中提供的默认的配置文件(application.properties/yml),再到默认值自动配置,都可以看出约定带来的便利,以及节省大量的配置。

来看下 Spring Boot 中一个自动配置的源码实例吧:

@Configuration
@ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class,MultipartConfigElement.class })
@ConditionalOnProperty(prefix = "spring.servlet.multipart", name = "enabled", matchIfMissing = true)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(MultipartProperties.class)
public class MultipartAutoConfiguration {private final MultipartProperties multipartProperties;public MultipartAutoConfiguration(MultipartProperties multipartProperties) {this.multipartProperties = multipartProperties;}@Bean@ConditionalOnMissingBeanpublic MultipartConfigElement multipartConfigElement() {return this.multipartProperties.createMultipartConfig();}@Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)@ConditionalOnMissingBean(MultipartResolver.class)public StandardServletMultipartResolver multipartResolver() {StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());return multipartResolver;}}@ConfigurationProperties(prefix = "spring.servlet.multipart", ignoreUnknownFields = false)
public class MultipartProperties {/*** Whether to enable support of multipart uploads.*/private boolean enabled = true;/*** Intermediate location of uploaded files.*/private String location;/*** Max file size. Values can use the suffixes "MB" or "KB" to indicate megabytes or* kilobytes, respectively.*/private String maxFileSize = "1MB";/*** Max request size. Values can use the suffixes "MB" or "KB" to indicate megabytes or* kilobytes, respectively.*/private String maxRequestSize = "10MB";/*** Threshold after which files are written to disk. Values can use the suffixes "MB"* or "KB" to indicate megabytes or kilobytes, respectively.*/private String fileSizeThreshold = "0";/*** Whether to resolve the multipart request lazily at the time of file or parameter* access.*/private boolean resolveLazily = false;// get/set/etc..}

这是一个文件上传的自动配置类,约定了:

1、约定了配置参数以 spring.servlet.multipart 前缀开始;

2、约定了很多默认配置,如:默认上传文件大小为 1M;

3、约定了所有的参数配置类名都是 *Properties;

4、约定了所有的自动配置类名都是 *AutoConfiguration;

5、约定了所有自动配置类配置在:/META-INF/spring.factories;

等等……

这样我们做一个文件上传操作几乎不用写任何配置了,除非满足不了需求,如:现在文件上传 1M 太小了,再加一行自定义配置即可,我们也可以按约定编写其他自动配置。

如果还不能理解,再来看 Maven 怎么做的,Maven 简直把约定大于配置的思想体现淋漓尽致。

Maven规定了哪个目录放什么文件,哪个文件做什么用,Maven会自动去处理,不需要我们再额外配置,其实我们也没有额外配置的需要,至少栈长我现在还没有遇到过。如果这些目录都让你来通过配置文件来配置,而每个项目配置的又不一样,你会不会想要崩溃?

其实这也不是新技术,只是一种设计思想,早在 JDK 1.5 中添加的《Java注解》就是很好的体现。

关于 “约定优于配置” 的思想,你还有什么好的想法,欢迎留言分享~

好了,今天的分享就到这里,关注Java技术栈微信公众号,在后台回复:boot,获取栈长整理的更多的 Spring Boot 教程,都是实战干货,以下仅为部分预览。

  • Spring Boot 读取配置的几种方式
  • Spring Boot 如何做参数校验?
  • Spring Boot 最核心的 25 个注解!
  • Spring Boot 2.x 启动全过程源码分析
  • Spring Boot 2.x 新特性总结及迁移指南
  • ……

本文原创首发于微信公众号:Java技术栈(id:javastack),转载请原样保留本信息。

转载于:https://www.cnblogs.com/javastack/p/11130361.html

Spring Boot 面试,一个问题就干趴下了!(下)相关推荐

  1. Spring Boot 面试杀手锏:自动配置原理

    欢迎关注方志朋的博客,回复"666"获面试宝典 不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项.除了某些老旧的政府项目或金融项目持有观望态度外,如 ...

  2. Spring Boot 面试问题

    Spring Boot 面试问题 今天我们将研究一些春季靴子面试的问题和答案.到目前为止,我们已经讨论了一些关于Spring BootFramework的帖子以及一些实时示例.在这篇文章中,我将向您简 ...

  3. spring boot面试_Spring Boot面试问题

    spring boot面试 Today we will look into some spring boot interview questions and answers. So far, we h ...

  4. Spring Boot 面试杀手锏—自动配置原理

    点击关注公众号,回复"1024"获取2TB学习资源! 引言 不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项.除了某些老旧的政府项目或金融项目持有观 ...

  5. Spring Boot面试的终极指南

    在本文中,我们探讨了针对经验丰富或新手的Spring Boot面试问答.我们正在尝试分享经验和知识,以帮助您提升作为Spring Boot Developer的职业. 问:什么是Spring Boot ...

  6. Spring Boot面试杀手锏————自动配置原理

    引言 不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项.除了某些老旧的政府项目或金融项目持有观望态度外,如今的各行各业都在飞速的拥抱这个已经不是很新的Spring启动框 ...

  7. 面试那点小事,你从未见过的spring boot面试集锦(附详细答案)

    一, 什么是spring boot? 多年来,随着新功能的增加,spring变得越来越复杂.只需访问页面https://spring.io/projects,我们将看到所有在应用程序中使用的不同功能的 ...

  8. spring cloud教程之使用spring boot创建一个应用

    <7天学会spring cloud>第一天,熟悉spring boot,并使用spring boot创建一个应用. Spring Boot是Spring团队推出的新框架,它所使用的核心技术 ...

  9. 使用React和Spring Boot构建一个简单的CRUD应用

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. Reac ...

  10. 利用spring boot 写一个稳定的爬虫

    1.前言 这篇文章是利用spring boot 写一个稳定的爬虫,爬取的网页数据包含未执行js的网页数据.http/https接口的请求数据.和经过网页渲染的js数据(需要chorme浏览器),数据库 ...

最新文章

  1. 2.Python中的reload函数以及not defined reload
  2. 我在车间写代码:我的代码能省1个亿
  3. unity 优秀开源项目
  4. 双系统装完只能u盘启动_苹果电脑安装双系统,切换MacOx系统和Windows系统!
  5. Python网络数据采集
  6. 从用户的视角看待网页设计(一)
  7. linux目录规范及简单说明
  8. C++-文件【1】-按行读文本文件的两种方法
  9. The Stanford Geostatistical Modeling Software(地质统计软件)
  10. ATL之深入浅出书评(转)
  11. Android学习笔记(一)——Android应用的界面编程
  12. 包装模式就是这么简单啦
  13. AMS1117输入电源加反后换元件
  14. 图解机器学习算法(1) | 机器学习基础知识(机器学习通关指南·完结)
  15. OSEK 操作系统的基本概念
  16. 程序员之路:Gmail邮箱客户端配置
  17. 北京迎来首场降雪 正逢国内观赏雪景好去处
  18. 搞定检索式对话系统的候选response检索--使用pysolr调用Solr
  19. 在鹅厂如何带薪刷视频?
  20. 什么是UID、UED、UXD、IXD、UCD、IAD,看这篇就足够了

热门文章

  1. 理解 Delphi 的类(十) - 深入方法[21] - 开放数组参数
  2. 6.MongoDB之索引
  3. java版mc植物生长条件_植物生长三大必要条件
  4. java visibility_浅析Android中的visibility属性
  5. 设计模式---工厂方法模式(c++实现)
  6. spring工具StopWatch优雅实现计时功能
  7. 大型项目用python吗_在大型项目上,Python 是个烂语言吗?
  8. HTML知识点详细汇总
  9. 【sklearn第二十四讲】密度估计
  10. Richard S. Sutton个人主页翻译