书籍很遗憾,虽然打造了一年半,终于写完了,但无法出版。一共626页,80万字符,25万汉字。
因为文笔不是很好,被编辑要求修改,我知道自己的文笔就是这样了,写写博客可以,但要达到电子工业出版社编辑的要求,我估摸着得精心修改2-3次。我放弃了可能出版的机会。
但是书名我还是要在这里告知大家一声:《SSM深入解析与项目实战》
我打算将书中内容以专栏的形式进行呈现给大家,帮助大家更好的学习Spring知识应用以及源码的阅读。
后续的话,每周会都进行专栏文章的发表和更新。
专栏文章中只会贴核心代码。
所有的代码在文章中github中都可以找到。
在专栏的后面,还有一个企业级项目的实战。
从数据库设计到项目架构一直到代码实现,让你体验一个完整项目的开发流程。
书的简介
本书从Spring、Spring MVC和MyBatis的源码组件开始讲解,再到SSM的基础应用,逐步深入到SSM的核心特性以及最后的项目实战。通过对本书的学习,读者更加容易理解SSM框架的设计与思想,从而可以更好地运用到工作实战中去,更加容易的解决一些基于Spring的项目运行BUG。在以后学习中也能通过本书习得的学习方法更加快速地理解和掌握新技术。 本书是结合大量实例进行讲解的,按书中讲解和配套资源所示操作,保证所有实例均可运行。本书适合想学习SSM框架的Java技术爱好者,尤其是有一些基础,但不知道如何继续深入的Java开发人员,以及其他对Java感兴趣的计算机专业学习、开源项目爱好者等。
项目中所有的源码都可以在此链接的仓库中找到:https://github.com/chenhaoxiang/uifuture-ssm
感谢
首先在这里,我要感谢石老板(石雷,对标阿里P9/P10),在工作百忙之中,帮我对书籍进行了一些文字和专业性知识的更正。 另外还要感谢聂总(厉森彪,花名聂鹏,对标阿里P9/P10),也在帮我美化书中的文笔和更改可能有误的专业知识。
在此还要感谢一些专家,邀请到了出版时对书进行点评,但是却没有机会再找他们谈及此事。 ——巴蔓 ——吴建南 ——徐雷 ——杨冠宝 非常感谢以上四位大佬
声明
本专栏的所有内容,由于是收费专栏,非常抱歉的告诉您,禁止转载文章。
书的目录
下面是书的目录,不敢说把Spring的所有点都讲到了,但是我敢说,99.9%你要在企业开发中,应用到的Spring技术,本专栏都涉及了,还给你分析了源码!
希望能对你有所帮助。
第一篇 基础篇
第1章 谈谈SSM框架和Redis
1.1 了解Spring框架
1.1.1 如何学习Spring 1.1.2 IoC(Inversion of Control 控制反转) 1.1.3 AOP(Aspect Oriented Programing面向切面编程)
1.2 了解MyBatis 1.2.1 MyBatis简介 1.2.2 Hibernate简介 1.2.3 MyBatis和Hibernate的比较
1.3 了解Spring MVC
1.4 了解Redis
1.5 Spring、Spring MVC、MyBatis框架运行流程 第2章 基本概念
2.1 类加载器(ClassLoader)
2.1.1 对象的实例流程 2.1.2 双亲委派模型 2.1.3 类加载器的工作原理 2.1.4 自定义类加载器
2.2 反射机制
2.2.1 什么是反射(Reflection) 2.2.2 类反射入门实例 2.2.3 通过类反射实现工厂方法 2.2.4 获取Class对象的三种方式 2.2.5 反射的应用场景与优缺点
2.3 动态代理
2.3.1 理解动态代理 2.3.2 JDK动态代理 2.3.3 CGLIB动态代理
2.4 Apache Maven工具介绍
2.4.1 Windows系统安装Maven 2.4.2 IDEA中配置Maven 2.4.3 Maven中的一些常用命令
第3章 设计模式
3.1 单例模式(Singleton Pattern)
3.1.1 懒汉式单例类 3.1.2 饿汉式单例类
3.2 工厂模式(Factory Pattern)
3.2.1 简单工厂模式(Simple Factory Pattern) 3.2.2 工厂方法模式(Factory Method Pattern) 3.2.3 抽象工厂模式(Abstract Factory)
3.3 代理模式(Proxy Pattern)
3.4 策略模式(Strategy Pattern)
3.4.1 策略模式的定义 3.4.2 策略模式的作用 3.4.3 模式结构 3.4.4 场景实例
3.5 模板模式(Template Pattern)
3.5.1 策略模式与模板模式 3.5.2 场景实例
3.6 MVC 模式
3.6.1 MVC中三大组件 3.6.2 MVC的优点 3.6.3 MVC实现
第二篇 Spring MVC框架
第4章 了解Spring MVC
4.1 Spring MVC架构特点
4.1.1 Spring MVC是什么 4.1.2 Spring MVC能做什么
4.2 Spring MVC体系结构
4.2.1 运行流程 4.2.2 Handler和Controller的联系
4.3 Spring MVC组件说明
4.3.1 DispatcherServlet(前端控制器) 4.3.2 HandlerMapping(映射处理器) 4.3.3 Handler(处理器) 4.3.4 HandlerAdapter(适配处理器) 4.3.5 ViewResolver(视图解析器) 4.3.6 View(视图)
第5章 Spring MVC基础
5.1 Spring MVC项目快速搭建
5.1.1 使用IDEA构建Maven项目 5.1.2 进行配置项目依赖 5.1.3 项目日志配置 5.1.4 演示页面 5.1.5 Spring MVC配置类 5.1.6 Web配置类 5.1.7 Controller层开发 5.1.8 进行Tomcat启动 5.1.9 NoClassDefFoundError-jstl异常处理 5.1.10 页面演示
5.2 Spring MVC中常用注解
5.2.1 Controller注解 5.2.2 RequestMapping注解 5.2.3 ResponseBody注解 5.2.4 RequestBody注解 5.2.5 PathVariable注解 5.2.6 RestController注解 5.2.7 CookieValue注解 5.2.8 RequestParam注解 5.2.9 InitBinder注解
5.3 对象和JSON或XML之间的转换
5.3.1 JSON和对象之间的转换 5.3.2 XML和对象之间的转换
5.4 静态资源映射
5.4.1 编程式静态资源映射 5.4.2 XML配置静态资源映射
5.5 ControllerAdvice注解
第6章 深入Spring MVC的九大组件
6.1 HandlerMapping映射处理器
6.1.1 HandlerMapping的作用 6.1.2 HandlerMapping源码 6.1.3 HandlerMapping初始化 6.1.4 DispatcherServlet.properties文件内容 6.1.5 RequestMappingHandlerMapping分析
6.2 HandlerAdapter适配处理器
6.2.1 HandlerAdapter源码 6.2.2 HandlerAdapter初始化 6.2.3 RequestMappingHandlerAdapter分析
6.3 HandlerExceptionResolver异常处理
6.3.1 HandlerExceptionResolver源码 6.3.2 HandlerExceptionResolver初始化
6.4 ViewResolver视图解析器
6.4.1 ViewResolver源码 6.4.2 ViewResolver初始化 6.4.3 resolveViewName方法被调用过程 6.4.4 ViewResolverRegistry分析
6.5 RequestToViewNameTranslator
6.5.1 RequestToViewNameTranslator接口被调用情况 6.5.2 RequestToViewNameTranslator初始化 6.5.3 DefaultRequestToViewNameTranslator分析
6.6 LocaleResolver国际化解析器
6.6.1 LocaleResolver初始化 6.6.2 AcceptHeaderLocaleResolver分析 6.6.3 SessionLocaleResolver分析 6.6.4 MessageSource国际化资源分析
6.7 ThemeResolver主题样式解析器
6.7.1 ThemeResolver初始化 6.7.2 ThemeResolver源码 6.7.3 ThemeResolver实现类 6.7.4 ThemeSource主题资源分析
6.8 MultipartResource文件上传解析器
6.8.1 MultipartResolver源码 6.8.2 MultipartResolver初始化 6.8.3 CommonsMultipartResolver分析
6.9 FlashMapManager重定向管理
6.9.1 FlashMapManager初始化 6.9.2 FlashMapManager源码 6.9.3 SessionFlashMapManager分析
第7章 Spring MVC基础应用
7.1 转发与重定向
7.1.1 Spring MVC中的转发方式 7.1.2 通过ViewResolver进行请求转发 7.1.3 通过ModelAndView对象进行请求转发 7.1.4 使用HttpServletRequest进行转发 7.1.5 Spring MVC中的重定向方式 7.1.6 通过ModelAndView实现重定向与传参 7.1.7 通过RedirectView对象实现重定向 7.1.8 转发与重定向中绝对路径
7.2 静态资源配置缓存以及进行GZIP压缩
7.2.1 配置静态资源的缓存 7.2.2 使用GzipResourceResolver进行静态资源压缩的加载 7.2.3 GZIP一键压缩工具
7.3 文件上传与下载
7.3.1 文件的上传与零XML注册拦截器 7.3.2 使用ResponseEntity进行文件的下载 7.3.3 大文件的下载
7.4 Spring MVC中多种主题的使用
7.4.1 主题的配置使用 7.4.2 使用SessionThemeResolver 来切换主题 7.4.3 使用Spring MVC内置拦截器进行主题切换
第8章 Spring MVC核心应用
8.1 全局异常处理
8.1.1 使用HandlerExceptionResolver接口进行全局异常处理 8.1.2 使用SimpleMappingExceptionResolver进行全局异常处理 8.1.3 使用ExceptionHandler注解进行全局异常处理
8.2 拦截器与过滤器
8.2.1 拦截器与过滤器的区别 8.2.2 Spring MVC中实现拦截器 8.2.3 使用DelegatingFilterProxy在过滤器中注入Bean 8.2.4 使用HandlerInterceptor接口实现拦截器
8.3 JSON数据交互
8.3.1 Spring MVC中JSON交互形式 8.3.2 应用实例
8.4 Spring MVC国际化配置
8.5 总结
第三篇 MyBatis框架
第9章 MyBatis组件
9.1 SqlSessionFactoryBuilder(工厂构造器)
9.1.1 SqlSessionFactoryBuilder源码
9.2 XMLConfigBuilder分析
9.2.1 XMLConfigBuilder构造函数 9.2.2 parse方法和parseConfiguration方法 9.2.3 loadCustomVfs方法 9.2.4 settingsElement方法 9.2.5 environmentsElement方法 9.2.6 typeHandlerElement方法 9.2.7 mapperElement方法
9.3 SqlSessionFactory(工厂接口)
9.3.1 SqlSessionFactory源码 9.3.2 DefaultSqlSessionFactory分析
9.4 SqlSession(会话)
9.4.1 多个参数的select高级方法 9.4.2 带参数的增删改查方法
9.5 MapperAnnotationBuilder(Mapper注解构建器)
9.5.1 MapperAnnotationBuilder类中的parse方法 9.5.2 MapperAnnotationBuilder类中loadXmlResource方法 9.5.3 parseCache方法和parseCacheRef方法 9.5.4 MapperAnnotationBuilder类中的parseStatement方法 9.5.5 MyBatis中注解与XML标签的对应和描述
第10章 MyBatis XML配置文件
10.1 properties 属性
10.2 settings 设置
10.3 typeAliases 类型别名
10.4 typeHandlers 类型处理器
10.5 objectFactory 对象工厂
10.6 plugins 插件
10.7 environments 环境
10.7.1 transactionManager 事务管理器 10.7.2 dataSource 数据源
10.8 databaseIdProvider 数据库厂商标识
10.9 mappers 映射器
第11章 MyBatis XML映射配置文件
11.1 查询(select)
11.1.1 sql元素
11.2 增删改(insert, delete and update)
11.2.1 insert与update处理主键自动生成 11.2.2 insert多行数据获取所有对象的主键 11.2.3 通过insert获取自增长主键值的另一种方式
11.3 参数(Parameters)
11.3.1 安全传参 11.3.2 字符串替换
11.4 结果集(ResultMap)
11.4.1 高级结果映射 11.4.2 id与result元素 11.4.3 关联元素(association、collection) 11.4.4 关联的嵌套结果 11.4.5 集合(一对多查询) 11.4.6 集合嵌套查询与嵌套结果 11.4.7 鉴别器
11.5 自动映射(Auto-mapping)
11.6 cache缓存mybatis-generator
11.6.1 缓存的属性 11.6.2 自定义缓存
11.7 MyBatis缓存机制
11.7.1 一级缓存 11.7.2 二级缓存
11.8 Cache定义的两种使用方式
11.8.1 cache元素定义 11.8.2 cache-ref元素定义
11.9 二级缓存实例
11.9.1 二级缓存的测试 11.9.2 二级缓存使用原则
第12章 动态SQL(Dynamic SQL)
12.1 if元素
12.2 choose, when, otherwise元素
12.3 trim, where, set元素
12.4 foreach元素
12.5 bind元素
12.6 多数据库支持与可拔插SQL脚本
12.6.1 多数据库厂商支持 12.6.2 动态 SQL 中的可插拔脚本语言
第13章 Generator逆向代码生成工具
13.1 MyBatis Generator概述
13.1.1 MBG会生成的代码 13.1.2 MBG依赖项
13.2 MyBatis Generator 快速入门
13.2.1 XML配置文件实例
13.3 使用Maven运行 MyBatis Generator
13.3.1 使用Maven插件运行MBG 13.3.2 完整的MBG配置文件 13.3.3 MBG其他配置
13.4 使用Java程序运行MyBatis Generator
13.4.1 方式一 13.4.2 方式二 13.4.3 总结
第四篇 Spring框架
第14章 IoC(控制反转)与DI(依赖注入)
14.1 Inversion of Control(IoC)概述
14.2 深入理解IoC
14.3 用代码理解IoC
14.4 Spring中IoC容器的实现
14.4.1 BeanFactory接口 14.4.2 ApplicationContext接口
14.5 传统OOP和IoC的对比
14.6 Dependency Injection(DI)与IoC
14.7 Spring中依赖注入方式
14.7.1 Spring IoC快速入门案例 14.7.2 Spring容器通过XML和注解方式装配Bean 14.7.3 构造方法注入(constructor injection) 14.7.4 setter方法注入(setter injection) 14.7.5 接口注入(interface injection)
第15章 Spring的核心机制
15.1 Spring容器中的Bean
15.1.1 Bean的作用域
- 15.1.1.1 singleton
- 15.1.1.2 prototype
- 15.1.1.3 request
- 15.1.1.4 session 15.1.2 ApplicationContext初始化过程
- 15.1.2.1 初始化BeanFactory
- 15.1.2.2 调用Spring工厂后置处理器
- 15.1.2.3 注册Bean后处理器
- 15.1.2.4 初始化消息源
- 15.1.2.5 初始化上下文事件广播器
- 15.1.2.6 初始化其他特殊的Bean
- 15.1.2.7 注册事件监听器
- 15.1.2.8 初始化作用域为singleton的Bean
- 15.1.2.9 发布上下文刷新事件 15.1.3 Bean的生命周期 15.1.4 Spring的Bean 和JavaBean比较
15.2 Spring中Bean的装配
15.2.1 使用XML装配Bean 15.2.2 使用注解装配Bean 15.2.2 使用Java类装配Bean
15.3 创建Bean的三种方式
15.3.1 使用构造器创建Bean实例 15.3.2 使用静态工厂方法创建Bean实例 15.3.3 调用实例工厂方法创建Bean实例
15.4 加载属性(properties)文件
15.4.1 通过 context:property-placeholder 标签加载 15.4.2 通过 util:properties 标签加载 15.4.3 通过PropertyPlaceholderConfigurer类加载 15.4.3 通过PropertyPlaceholderConfigurer类加载
15.5 Spring条件化装配Bean
15.5.1 Conditional注解源码解析 15.5.2 演示Conditional注解 15.5.3 ConditionContext与AnnotatedTypeMetadata讲解
15.6 Spring中的事件机制
15.6.1 事件驱动模型 15.6.2 Spring中的事件驱动模型 15.6.3 Spring中的事件广播器 15.6.4:演示Spring的事件机制
15.7 Spring中的定时器
15.7.1 使用注解配置定时器
15.8 Spring表达式语言(SpEL)
15.8.1 SpEL的功能特性 15.8.2 SpEL基础 15.8.3 SpEL的原理以及接口 15.8.4 SpEL相关语法
15.9 context:annotation-config配置项
15.9.1 context:annotation-config的作用 15.9.2 context:annotation-config源码分析
第16章 Spring AOP(面向切面编程)
16.1 了解AOP
16.1.1 AOP相关概念 16.1.2 Spring AOP核心接口&类
16.2 演示Spring AOP实例
16.2.1 XML方式演示Spring AOP实例 16.2.2 注解方式演示Spring AOP实例
第17章 Spring的数据库事务管理
17.1 数据库事务基础
17.1.1 什么是事务 17.1.2 事务的隔离模式 17.1.3 事务并发的问题 17.1.4 事务类型
17.2 Spring对事务管理的支持
17.2.1 Spring事务管理核心接口 17.2.2 Spring使用事务案例的准备 17.2.3 不使用事务进行转账模拟 17.2.4 编程式事务处理转账 17.2.5 声明式事务处理转账
17.3 Transactional注解
17.3.1 Transactional注解的用法 17.3.2 Transactional 注解的实现原理 17.3.3 声明式事务实现大体分析 17.3.4 声明式事务实现具体分析
第五篇 实战篇
第18章 项目设计
18.1 项目简介与分析
18.2 项目模块与相关技术
18.2.1 功能模块总分 18.2.2 前台模块 18.2.3 前台模块
18.3 技术分析以及依赖
18.4 数据库设计
第19章 初步开发
19.1 搭建项目框架
19.1.1 创建Maven的Web项目 19.1.2 进行配置项目依赖 19.1.3 Spring、MyBatis整合配置 19.1.4 log4j配置与发送日志邮件
19.2 JDBC配置文件中对数据库账号密码加密
19.2.1 学习如何进行调试与查看源码 19.2.2 继承PropertySourcesPlaceholderConfigurer类进行解密处理 19.2.3 继承Properties类进行解密处理
19.3 数据库实体快速生成
19.3.1 集成MyBatis-Plus 19.3.2 自动生成DAO、Service等层代码
19.4 集成Spring MVC
19.5 IDEA配置Tomcat Web项目
第20章 项目功能
20.1 系统注册功能
20.1.1 接入Redis 20.1.2 发送邮件配置 20.1.3 Controller层与Server层实现 20.1.4 利用Redis实现数字的原子性自增
20.2 系统登录功能
20.2.1 用户名/邮箱登录 20.2.2 使用MapStruct进行Bean拷贝 20.2.3 退出功能 20.2.4 Redis实现Session共享 20.2.5 自动登录功能
20.3 资源发表功能
20.3.1 全局异常捕获与日志输出 20.3.2 登录拦截功能 20.3.3 上传资源文件到本地 20.3.4 上传图片文件到阿里云OSS 20.3.5 资源的发表
20.4 用户相关功能
20.4.1 增加用户IP记录 20.4.2 用户关注功能 20.4.3 用户收藏功能
20.5 用户的评论功能
20.5.1 简单的评论功能 20.5.2 评论分页功能 20.5.3 评论敏感词过滤 20.5.4 防止XSS攻击
20.6 资源数据
20.6.1 专题资源分页数据 20.6.2 分类资源分页数据 20.6.3 标签资源分页数据 20.6.4 分类、专题、标签数据
20.7 交易功能
20.7.1 交易结构设计 20.7.2 功能实现 20.7.3 管理员登录拦截实现 20.7.4 日志拦截器 20.7.5 总结
以上目录已经为全部写完的一个目录,你不需要担心订阅后文章不更新的情况。
有图为证: