Spring 和 Spring Boot 概要
Spring核心是提供一个容器(container),即Spring application context(Spring上下文) ,它创建和管理应用程序组件(components),这些组件或者beans在Spring application context中连接在一起组成一个完整的应用程序
Spring中将beans连接到一起的方式是dependency injection(依赖注入),而不是让组件自己创建和维护他们所依赖的beans,通常通过构造函数或者setter方法传入(autowiring(自动装配))
XML配置方式注入
<bean id="inventoryService" class="com.example.InventoryService" /> <bean id="productService" class="com.example.ProductService" /> <constructor-arg ref="inventoryService" /> //构造函数传入依赖的inventoryService对象 </bean>
基于Java的配置方式注入(推荐:更大的类型安全性和可重构性)
@Configuration //此注解表名该类是配置类,将为Spring上下文提供bean public class ServiceConfiguration { @Bean //此注解表名此方法的返回对象将作为bean添加到Spring上下文中 public InventoryService inventoryService() { return new InventoryService(); } @Bean public ProductService productService() { return new ProductService(inventoryService()); //构造函数传入依赖bean }
Spring通过component scanning(组件扫描)可以自动从应用程序的类路径中发现组件并创建bean放入Spring上下文中,通过autowiring(自动装配)可以自动将组件注入他们所依赖的bean
除了核心容器之外,Spring和一系列相关的库还提供了: web框架丶数据持久化丶安全框架丶与其他系统集成丶运行时监控丶微服务支持丶响应式编程模型等
随着Spring Boot的引入automatic configuration(自动配置)已经远远超过了component scanning和autowiring的范畴,Spring Boot可以根据类路径条目丶环境变量等其他因素预测哪些组件需要连接
Spring Boot的autoconfiguration(自动配置)大大减少了构建应用程序时的显式配置(XML或者java方式)
初始化一个Spring Boot项目
- 使用IDEA方式创建Spring Boot项目
- 新建项目时使用Spring Initializr创建即可
- 了解Spring Boot DevTools(实现热部署)
- 当代码改变时自动重启应用程序
- 页面内容改变时(templates,js,css等)会自动刷新浏览器(需要安装配套浏览器插件LiveReload))
- 禁用模版缓存
- 如果使用H2数据库则可以实现从浏览器访问H2 Console
Spring 部分功能概述
*Spring core: *
- Spring框架核心,是Spring其他功能的基础,它主要提供了核心容器和依赖注入框架,
- Spring MVC(web框架)
- 对数据持久化的支持,如JdbcTemplate丶
- Spring(5.0.8)开始支持reactive-style programming 即Spring WebFlux web框架
*Spring Boot: *
- starter dependencies(起步依赖) 和 autoconfiguration(自动配置)
- 提供对程序内部运行时检查
- 灵活规范的环境配置
- 除了核心框架中提供的测试之外,提供额外的测试支持
- 提供了基于Groovy scripts的编程模型Boot CLI(command-line interface)
*Spring Data: *
- 对数据持久化操作的支持,简化数据库访问,并支云服务
*Spring Security: *
- 一个安全框架,包括身份验证丶授权丶API安全
Spring Integration
- 在系统内提供实现轻量级丶事件驱动交互行为的框架
- 在系统间提供一种基于适配器的平台,以支持灵活的系统间交互
Spring Batch
- 一个轻量级批处理框架
Spring Cloud
- 面向microservices(微服务)的架构解决方案