SpringBoot的核心:约定优于配置
约定优于配置(Convention over Configuration),也称作按约定编程,是一种软件设计范式,目的在于减少开发人员需做决定的数量、获得简单的好处。本质地说,就是开发人员仅需规定应用下不符规定的部分。例如,加入模型中有个User的类,那么数据库对应的表默认为user。只有偏离这一约定时才需要配置。
在Spring体系中,Spring Boot JPA就是约定优于配置最佳实现之一,不需关注表结构,表名就是类型,属性名就是表字段,String对应varchar,long对应bigint。只有一些特殊要求的属性,才会单独进行配置,简化了大量工作。
SpringBoot体系将约定优于配置思想展现淋漓尽致,小到配置文件、中间件的默认配置,大到内置容器、生态中各种starters都遵循此设计原则。Starters的核心组件之一就是autoconfigure模块,也就是Starters核心功能,在启动时自动装配,属性默认化配置。
Starers
SpringBoot Starters基于约定优于配置的理念设计。Starters有两个核心组件:自动配置代码和提供自动配置模块及其它有用的依赖。当项目中引入某个Starter,即拥有了此软件默认使用能力,除非我们特定的配置,一般仅需少量配置或者不配置就可使用组件对应的功能。
名称 | 描述 |
spring-boot-starter | 核心 Starter,包括自动配置支持,日志和 YAML |
spring-boot-starter-activemq | 用于使用 Apache ActiveMQ 实现 JMS 消息 |
spring-boot-starter-amqp | 用于使用 Spring AMQP 和 Rabbit MQ |
spring-boot-starter-cache | 用于使用 Spring 框架的缓存支持 |
spring-boot-starter-data-elasticsearch | 用于使用 ElasticSearch 搜索,分析引擎和 Spring Data ElasticSearch |
spring-boot-starter-data-jpa | 用于使用 Hibernate 实现 Spring Data JPA |
spring-boot-starter-data-mongodb | 用于使用基于文档的数据库 MongoDB 和 Spring Data MongoDB |
spring-boot-starter-data-redis | 用于使用 Spring Data Redis 和 Jedis 客户端操作键—值数据存储 Redis |
spring-boot-starter-jta-atomikos | 用于使用 Atomikos 实现 JTA 事务 |
sring-boot-starter-mail | 用于使用 Java Mail 和 Spring 框架 Email 发送支持 |
spring-boot-starter-quartz | 用于定时任务 Quartz 的支持 |
spring-boot-starter-security | 对 Spring Security 的支持 |
spring-boot-starter-test | 用于测试 Spring Boot 应用,支持常用测试类库,包括 JUnit、Hamcrest 和 Mockito |
spring-boot-starter-thymeleaf | 用于使用 Thymeleaf 模板引擎构建 MVC Web 应用 |
spring-boot-starter-validation | 用于使用 Hibernate Validator 实现 Java Bean 校验 |
spring-boot-starter-web | 用于使用 Spring MVC 构建 Web 应用,包括 RESTful。Tomcat 是默认的内嵌容器 |
spring-boot-starter-websocket | 用于使用 Spring 框架的 WebSocket 支持构建 WebSocket 应用 |
Spring、SpringBoot和SpringCloud的关系
Spring最初两大核心是SpringIOC和SpringAOP成就了Spring,在这两大核心功能不断发展有了Spring事物、SpringMVC等一系列产品,最终成就了Spring帝国。
SpringBoot是在强大的Spring帝国生态基础上发展而来,并非要取代Spring,而是为了更好地使用。
SpringCloud是一系列框架的有序集合,利用SpringBoot的便利简化了分布式系统基础设施的开发。服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等都可以用SpringBoot的开发风格做到一键启动和部署。SpringCloud完全基于SpringBoot 而开发。
以下是他们之间的关系:
SpringIOC/AOP > Spring > SpringBoot > SpringCloud