Java EE 企业级应用开发教程 第2版

Java EE 企业级应用开发教程 第2版

Spring

介绍

  • 概述

    • 分层的 Java 一站式轻量级开源框架
    • 控制反转 (IoC)
    • 面向切面编程(AOP)
  • 优点

    • 非侵入式设计
    • 降低耦合性,方便开发
    • 支持 AOP 编程
    • 支持声明式事务
    • 方便程序测试
    • 方便集成各种框架
    • 降低 JavaEE API 的使用难度
  • 体系结构

    • 核心容器

      • Bean,Core,Context,SpEL
    • 数据访问及集成

      • JDBC,ORM,OXM,JMS,Transactions
    • Web

      • WebSocket,Servlet,Web,Portlet
    • 其他模块

      • AOP,Aspects,Instrumentation,Messaging,Test
  • Spring 5 新特性

    • 更新 JDK 基线
    • 修订核心框架
    • 更新核心容器
    • 支持响应式编程
    • 支持函数式 Web 框架
    • 支持 Kotlin
    • 提升测试功能
  • 目录结构

    • docs

      • 开发指南,API 参考文档,…
    • libs

      • 开发所需的 JAR 包和源码
    • schema

      • 各种配置文件的 XML schema 文档

控制反转与依赖注入

  • 控制反转

    • 对象实例的控制权由应用代码转移到了 IoC 容器,控制权发生了反转。
  • 依赖注入

    • IoC 容器在运行期间动态的将某种依赖资源注入到对象中。

    • 类型

      • 构造方法注入
      • 属性 setter 方法注入

IoC 容器

  • BeanFactory 接口

    • Spring 容器最基本的接口
    • 实现类:XmlBeanFactory
  • ApplicationContext 接口

    • 建立在 BeanFactory 接口基础之上

    • 额外功能:国际化,资源访问,事件传播

    • 可以为单例的 Bean 实行预初始化

    • 实现类

      • ClassPathXmlApplicationContext
      • FileSystemXmlApplicationContext
      • AnnotationConfigApplicationContext
      • WebApplicationContext
      • ConfigurableWebApplicationContext
  • Bean 的配置

    • 格式

      • XML
      • Properties
    • XML 配置

          • id

          • name

          • class

          • scope

          • factory-method

          • factory-bean

          • autowire

            • index
            • type
            • ref |
            • value |
            • name

            • ref

            • value


            • -

                • key(字符串类型)
                • value-ref |
                • value |
        • default-autowire

  • Bean 的实例化

    • 构造方法实例化
    • 静态工厂实例化
    • 实例工厂实例化
  • Bean 的作用域

    • singleton(默认)
    • prototype
    • request
    • session
    • global session
  • Bean 的装配方式

    • 基于 XML

      • 属性 setter 方法注入
      • 构造方法注入
    • 基于注解

      • 在配置文件 applicationContext.xml 中开启相应的注解处理器
      • @Component
      • @Controller
      • @Service
      • @Repository
      • @Scope
      • @Value
      • @Autowired
      • @Resource
      • @Qualifier
      • @PostConstruct
      • @PreDestroy
    • 自动装配

      • no(默认值)
      • default
      • byName
      • byType
      • constructor
  • Bean 的生命周期

    • 实例初始化后

    • 实例销毁前

    • 监控

      • XML 配置文件
      • 注解

AOP

  • 介绍

    • 概述

      • 将程序中相同的业务逻辑进行横向切割,并将重复的业务逻辑抽取到一个独立的模块中,以达到提高程序可用性和开发效率的目的。
    • 术语

      • 切面(Aspect)

        • 用于横向插入系统的功能类
      • 连接点(Joinpoint)

        • 程序执行过程中某个特定的节点
      • 切入点(Pointcut)

        • 满足预先指定条件的连接点
      • 通知/增强处理(Advice)

        • 插入的切面程序代码,是切面的具体实现
      • 目标对象(Target)

        • 被插入切面的方法
      • 织入(Weaving)

        • 将切面代码插入到目标对象上,从而生成代理对象的过程
      • 代理(Proxy)

        • 将通知应用到目标对象后,程序动态创建的通知对象
      • 引介(Introduction)

        • 一种特殊的通知,为目标对象添加一些属性和方法
  • 实现机制

    • JDK 动态代理

      • java.lang.reflect.Proxy.newProxyInstance()
    • CGLib 动态代理

      • 不要求目标类实现接口
      • Spring 核心包已集成 CGLib 所需的包
      • org.springframework.cglib.proxy.Enhancer
  • 基于 XML 的 AOP 实现

      • id

      • ref

        • pointcut
        • pointcut-ref
        • method
        • throwing
        • returning
        • id

        • expression

          • execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
  • 基于注解的 AOP 实现

    • @Aspect
    • @Pointcut
    • @Before
    • @After
    • @Around
    • @AfterReturning
    • @AfterThrowing
    • 开启 @aspectj 的自动代理支持
  • 注意

    • 相关依赖

      • aspectjrt
      • aspectjweaver
    • JoinPoint 接口实例作为参数来获得目标对象的类名和目标方法名

    • ProceedingJoinPoint 接口实例作为参数来获得目标对象的目标方法参数

    • 环绕通知必须接收一个类型为 ProceedingJoinPoint 的参数,返回值也必须是 Object 类型,且必须抛出异常

JDBC

  • JdbcTemplate 概述

    • 模板类

    • 更高层次的抽象均在此之上

    • 继承:JdbcAccessor

      • DataSource

      • SQLExceptionTranslator(接口)

        • 负责对 SQLException 异常进行转译
    • 实现:JdbcOperations

  • JDBC 的配置

    • 模块

      • core
      • dataSource
      • object
      • support
    • 配置文件 applicationContext.xml 中

      • 配置数据源

        • org.springframework.jdbc.datasource.DriverManagerDataSource
      • 配置 JDBC 模板

        • org.springframework.jdbc.core.JdbcTemplate
      • 配置注入类

      • 注意

        • 配置 JdbcTemplate 时,需要将 dataSource 注入 JdbcTemplate 中
        • 其他需要使用 JdbcTemplate 的 Bean,也需要将 JdbcTemplate 注入该 Bean 中。
    • dataSource

      • driverClassName
      • url
      • username
      • password
  • JdbcTemplate 的常用方法

    • execute()
    • update()
    • query()
  • 事务管理概述

    • 核心接口

      • 依赖包:spring-tx

      • PlatformTransactionManager

        • 用于管理事务

        • getTransaction()

        • commit()

        • rollback()

        • 实现类

          • DataSourceTransactionManager
      • TransactionDefinition

        • 定义事务描述相关的常量

        • 事务的隔离级别

          • 默认
          • 读—未提交(脏读,幻读,不可重复读)
          • 读—已提交(幻读,不可重复读)
          • 允许重复读(MySQL 默认隔离级别)
          • 事务串行执行
        • 事务的传播行为

        • 事务的超时时间

        • 是否为只读事务

        • 方法:获取事务的属性

      • TransactionStatus

        • isNewTransaction()
        • hasSavepoint()
        • isRollbackOnly()
        • setRollbackOnly()
        • isCompleted()
        • flush()
    • 事务管理的方式

      • 编程式

        • 通过编写代码实现的事务管理
      • 声明式

        • 通过 AOP 实现的事务管理
    • 相关依赖

      • aspectjweaver
      • aopalliance
  • 声明式事务管理

    • XML 方式

      • 引入 tx 命名空间

        • id

        • transaction-manager

            • name
            • propagation
            • isolation
            • read-only
            • timeout
            • rollback-for
            • no-rollback-for
    • 注解方式

      • @Transactional

        • value
        • propgation
        • isolation
        • timeout
        • readonly
        • rollbackFor
        • rollbackForClassName
        • noRollbackFor
        • noRollbackForClassName
      • 类上

        • 该类的所有 public 方法都将具有同样类型的事务属性
      • 类中的方法上

        • 若类上也有该注解,屏蔽掉类上的
      • 注意:配置事务注解驱动

Spring MVC

介绍

  • 基于 Servlet API 构建的原始 Web 框架

  • 作用于三层架构的表现层

  • 控制器

    • 接收客户端的请求
    • 对请求进行解析和封装
    • 将请求交给业务层处理
  • 视图

    • 对处理结果进行渲染
    • 响应给客户端
  • 工作原理

    • 组件

      • 处理器映射器
      • 处理器适配器
      • 视图解析器

核心类和注解

  • DispatcherServlet

  • @Controller

  • @RequestMapping

    • @GetMapping
    • @PostMapping
    • @PutMapping
    • @DeleteMapping
    • @PatchMapping
  • URL 路径映射

    • Ant 风格
    • RESTful 风格

数据绑定和响应

  • 绑定:请求参数绑定到处理器形参中

    • ServletRequest → DataBinder → ConvertService → Validator → BindingResult
  • 简单数据绑定

    • 默认类型数据绑定

      • HttpServletRequest
      • HttpServletResponse
      • HttpSession
      • Model/ModelMap
    • 简单数据类型绑定

      • Java 中基本类型
    • POJO 绑定

    • 自定义类型转换器

  • 复杂数据绑定

    • 数组绑定

    • 集合绑定

    • 复杂 POJO 绑定

      • 属性为对象类型
      • 属性为 List 类型
      • 属性为 Map 类型
    • JSON 数据绑定

  • 页面跳转

    • 返回值为 void 类型的页面跳转

    • 返回值为 String 类型的页面跳转

      • 不携带数据
      • 携带数据
    • 返回值为 ModeAndView 类型的页面跳转

  • 数据回写

    • 普通字符串回写

    • JSON 数据回写

      • 对象数据转换成 JSON 数据后的回写
      • 集合数据转换成 JSON 数据后的回写

高级功能

  • 异常处理

    • 简单异常处理器
    • 自定义异常处理器
    • 异常处理注解
  • 拦截器

    • 概述

      • 动态拦截 Controller 方法调用的对象。
      • 只针对 Spring MVC 的请求进行拦截
    • 配置

    • 执行流程

      • 单个拦截器
      • 多个拦截器

MyBatis

介绍

  • ORM 框架
  • 工作原理

配置

  • 核心对象

    • SqlSessionFactoryBuilder
    • SqlSessionFactory
    • SqlSession
  • 配置文件

    • 主要元素

        • :配置属性

        • :改变运行时的行为

        • :类型别名

        • :引入映射文件

    • 映射文件

      • 常用元素