Spring Web 应用
Spring Web 应用Spring MVC 提供了一种基于注解的编程模型,@Controller 和 @RestController 组件使用注解来表达请求映射、请求输入、异常处理等。注解控制器具有灵活的方法签名,并且不必扩展基类或实现特定接口。以下示例显示了一个由注解定义的控制器: 123456789@Controllerpublic class HelloController { @GetMapping("/hello") public String handle(Model model) { model.addAttribute("message", "Hello World!"); return "index"; }} 在前面的示例中,该方法接受一个 Model 并以 String 形式返回一个视图名称,但还存在许多其他选项。 快速入门下面,通过一个简单的示例来展示如何通过 Spring 创建一个 He...
Spring MVC 之过滤器
Spring MVC 之过滤器spring-web 模块提供了一些有用的 Filter: Form Data Forwarded Headers Shallow ETag CORS 表单内容过滤器浏览器只能通过 HTTP GET 或 HTTP POST 提交表单数据,但非浏览器客户端也可以使用 HTTP PUT、PATCH 和 DELETE。 Servlet API 需要 ServletRequest.getParameter*() 系列方法来支持仅对 HTTP POST 的表单字段访问。 spring-web 模块提供了 FormContentFilter 来拦截内容类型为 applicationx-www-form-urlencoded 的 HTTP PUT、PATCH、DELETE 请求,从请求体中读取表单数据,并包装 ServletRequest 通过 ServletRequest.getParameter() 系列方法使表单数据可用。 转发过滤器当请求通过代理(如负载均衡器)时,主机、端口和方案可能会发生变化,这使得从客户端角度创建指向正确主机、端口和方案的链接成为...
Spring MVC 之 DispatcherServlet
Spring MVC 之 DispatcherServlet简介DispatcherServlet 是 Spring MVC 框架的核心组件,负责将客户端请求映射到相应的控制器,然后调用控制器处理请求并返回响应结果。 DispatcherServlet 工作原理DispatcherServlet 工作流程DispatcherServlet 的工作流程大致如下图所示: 接收 Http 请求:当客户端发送 HTTP 请求时,DispatcherServlet 接收该请求并将其传递给 Spring MVC 框架。 选择 Handler:DispatcherServlet 会根据请求的 URL 找到对应的处理器映射器 HandlerMapping,该映射器会根据配置文件中的 URL 映射规则找到合适的处理器 Handler。 绑定属性:DispatcherServlet 会根据程序的 web 初始化策略关联各种 Resolver,如:LocaleResolver、ThemeResolver 等。 DispatcherServlet 根据 <servlet-name>-se...
Spring Data 综合
Spring Data 综合Spring Data Repository 抽象的目标是显著减少各种访问持久化存储的样板式代码。 核心概念Repository 是 Spring Data 的核心接口。此接口主要用作标记接口,以捕获要使用的类型并帮助您发现扩展此接口的接口。CrudRepository 和 ListCrudRepository 接口为被管理的实体类提供复杂的 CRUD 功能。ListCrudRepository 提供等效方法,但它们返回 List,而 CrudRepository 方法返回 Iterable。 CrudRepository 接口定义: 12345678910111213141516public interface CrudRepository<T, ID> extends Repository<T, ID> { <S extends T> S save(S entity); Optional<T> findById(ID primaryKey); Iterable<T> fin...
Spring 访问 Redis
Spring 访问 Redis简介Redis 是一个被数百万开发人员用作数据库、缓存、流引擎和消息代理的开源内存数据库。 在 Spring 中,spring-data-redis 项目对访问 Redis 进行了 API 封装,提供了便捷的访问方式。 spring-data-redis spring-boot 项目中的子模块 spring-boot-starter-data-redis 基于 spring-data-redis 项目,做了二次封装,大大简化了 Redis 的相关配置。 Spring Boot 快速入门引入依赖在 pom.xml 中引入依赖: 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency> 数据源配置1234spring.redis.database = 0spring.redis....
Spring EL 表达式
Spring EL 表达式参考资料 Spring 官方文档之 Core Technologies 《小马哥讲 Spring 核心编程思想》
Spring 应用上下文生命周期
Spring 应用上下文生命周期Spring 应用上下文启动准备阶段AbstractApplicationContext#prepareRefresh() 方法 启动时间 - startupDate 状态标识 - closed(false)、active(true) 初始化 PropertySources - initPropertySources() 检验 Environment 中必须属性 初始化事件监听器集合 初始化早期 Spring 事件集合 BeanFactory 创建阶段AbstractApplicationContext#obtainFreshBeanFactory() 方法 刷新 Spring 应用上下文底层 BeanFactory - refreshBeanFactory() 销毁或关闭 BeanFactory,如果已存在的话 创建 BeanFactory - createBeanFactory() 设置 BeanFactory Id 设置“是否允许 BeanDefinition 重复定义” - customizeBeanFactory(DefaultLi...
Spring Environment 抽象
Spring Environment 抽象理解 Spring Environment 抽象统一的 Spring 配置属性管理 Spring Framework 3.1 开始引入 Environment 抽象,它统一 Spring 配置属性的存储,包括占位符处理和类型转换,不仅完整地替换 PropertyPlaceholderConfigurer,而且还支持更丰富的配置属性源(PropertySource) 条件化 Spring Bean 装配管理 通过 Environment Profiles 信息,帮助 Spring 容器提供条件化地装配 Bean Spring Environment 接口使用场景 ⽤于属性占位符处理 用于转换 Spring 配置属性类型 用于存储 Spring 配置属性源(PropertySource) 用于 Profiles 状态的维护 Environment 小案例Environment 占位符处理Spring 3.1 前占位符处理 组件:org.springframework.beans.factory.config.PropertyPlaceho...
Spring 注解
Spring 注解Spring 注解驱动编程发展历程 注解驱动启蒙时代:Spring Framework 1.x 注解驱动过渡时代:Spring Framework 2.x 注解驱动黄金时代:Spring Framework 3.x 注解驱动完善时代:Spring Framework 4.x 注解驱动当下时代:Spring Framework 5.x Spring 核心注解场景分类Spring 模式注解 Spring 注解 场景说明 起始版本 @Repository 数据仓储模式注解 2.0 @Component 通用组件模式注解 2.5 @Service 服务模式注解 2.5 @Controller Web 控制器模式注解 2.5 @Configuration 配置类模式注解 3.0 装配注解 Spring 注解 场景说明 起始版本 @ImportResource 替换 XML 元素 <import> 2.5 @Import 导入 Configuration 类 2.5 @ComponentScan 扫描指定 p...
Spring 事件
Spring 事件Java 事件/监听器编程模型设计模式 - 观察者模式扩展 可观者对象(消息发送者) - java.util.Observable 观察者 - java.util.Observer 标准化接口 事件对象 - java.util.EventObject 事件监听器 - java.util.EventListener 面向接口的事件/监听器设计模式事件/监听器场景举例 Java 技术规范 事件接口 监听器接口 JavaBeans java.beans.PropertyChangeEvent java.beans.PropertyChangeListener Java AWT java.awt.event.MouseEvent java.awt.event.MouseListener Java Swing javax.swing.event.MenuEvent javax.swing.event.MenuListener Java Preference java.util.prefs.PreferenceC...