概述

新特性

  • 响应式编程
  • 函数式编程
    • HandlerFunction
    • RouterFunction //TBD
  • 测试套件

    核心概念

    常用模块

  • 核心容器

    • spring -core
    • spring-beans
    • spring-context
    • spring-context-support
    • spring-expression
  • AOP 与 Instrumentation
    • spring-aop
    • spring-aspects
    • spring-instrument
    • spring-instrument-tomcat
  • 消息
    • spring-messaging
  • 数据访问/集成
    • spring-jdbc
    • spring-tx //事务
    • spring-orm
    • spring-oxm
    • spring-jms
  • Web
    • spring-web
    • spring-webmvc
    • spring-websocket
    • spring-webflux
  • 测试

    • spring-test

      难点 设计模式

  • POJO模式 轻量级和最小侵入

  • 依赖注入DI
  • Decorator Proxy设计模式 进行声明式编程
  • Template设计模式 消除样板代码

IoC容器

  • 依赖注入与控制反转
    • 控制反转一般分为依赖注入 和依赖查找 两种实现类型
  • Ioc 容器和Bean
  • 配置 元数据 //难点
    • 基于注解
    • 基于java
    • 基于xml文件
  • 实例化容器
  • 使用容器
  • bean的命名
    • id
    • name
  • 实例化bean的方式
    • 通过构造函数
    • 通过静态工厂方法
    • 使用工厂实例方法实例化 //可以在xml factory-method 设置
  • 注入方式 ## 重点 ##
    • 基于构造函数
      • contructor-arg
      • @ConstructorProperties 注解
    • 基于setter方法
  • 依赖注入详细配置
    • 直接赋值
      • property标签
      • p:xxxx
      • properties
    • 引用其他bean
    • 内部bean
    • 集合
    • Null及空字符串
    • XML 短命名空间
    • 复合属性名称
  • 使用depends-on 不是直接依赖关系时,强迫依赖的bean在引用前就会被初始化
  • 延迟加载bean
    • lazy-init 在引用时才会被初始化
  • 自动装配
    • 自动配置
      • @ComponentScan + @Autowired 配合
      • @SpringBootApplication = @Configuration+@EnableAutoConfiguration+@ComponentScan
  • 方法注入
    • 单例bean A 使用非单例bean B时,每次A都是旧的,若想是新的方法有
      • 使用getBean方法
      • lookup-method注入
    • 动态改变方法实现
      • replaced-method
  • bean scope
    • singleton
    • prototype //使用一次创建一次
    • request //每个http都有自己的实例
    • session //
    • application //每个ServeletContext有一个实例
    • websocket //每个websocket有一个实例
    • 自定义scope
      • 实现接口Scope
  • 自定义bean生命周期
    • 方式
      • 通过实现 InitializingBean 和 DisposableBean //不推荐,因为有耦合
      • JSR-250 注解如@PostConstruct 和 @PreDestory
      • 使用init-method 和destory-method也可以解耦 spring接口
    • 初始化回调
      • 所有必要依赖配置完成后执行
      • 实现 InitializingBean
      • @PostConstruct
      • 使用init-method 在xml中配置
    • 销毁回调
    • 结合生命周期机制
      • 如果同时配置 ,执行顺序如下
        • 包含@PostConstruct 注解的方法
        • 在 InitializingBean 中的afterPoroertiesSet() 方法
        • 自定义的init方法
      • 销毁方法同时配置,执行顺序
        • @PreDestroy注解的方法
        • 在DisposableBean中的destory方法
        • 自定义的destory方法
    • 启动和关闭回调
      • 接口 Lifecycle
      • LifeCycleProcesser
      • SmartLifeCycle
    • 在非web应用环境中优雅地关闭Spring Ioc容器
      • Configurable ApplicationContext 的registerShutdowanHook来注册销毁钩子
    • ApplicationContextAware和BeanNameAware
      • ApplicationContextAware对象会包含一个ApplicationContext的引用
    • 其他Aware接口
      • 这些接口的使用都违反IoC原则,最好不用
  • bean定义继承
  • 容器扩展点
    • BeanPostProcesser
      • 通过实现其定义的回调方法, 可以提供自己的实例化逻辑,依赖分析逻辑等
      • 在Spirng容器完成实例化,配置和初始化bean后
      • 可以配置多个,实现Ordered接口来控制顺序
    • BeanFactoryPostProcessor
      • 区别,操作bean的配置元数据,可以在容器实例化bean前修改他
      • 也可以通过Ordered接口控制多个执行顺序
  • 容器扩展例子
    • PropertyPlaceholderConfigurer
      • BeanPostProcesser实现之一
      • 用来允许部署应用程序来自定义指定环境属性, 如jdbc.properties
    • PropertyOverrideConfigurer
      • 有覆盖机制
  • 基于注解的配置
    • @Required
      • 修饰setter方法
      • 如果属性没有被填充,那么容器就会抛异常,快速失败避免NullPointerException
    • @Autowired
      • 可以注解到传统的setter方法, @Inject也可以用于这种
      • 也可以用于任意名称和多个参数的方法
      • 也可以用于构造方法和字段
      • 期望类型的数组
      • 特定类型集合
      • require=false
    • @Primary
      • 优先装配
    • @Qualifier
      • 通过参数来选择bean
    • @Resource
      • 默认byname
    • @PostConstruct @PreDestory
  • 类路径扫描及组件管理
    • @Component 及其同义注解
      • @Repository @Service @Controller @Component 分别习惯用于持久层,服务层,表现层,和自定义
      • @Repository 已经支持作为自动异常转换标记
    • 元注解
      • 能被应用到另一注解上的注解
      • 也可以被用于创建组合注解
    • 自动检测类并注册bean定义
      • 需要添加@ComponentScan 到自己的 @Configuration类上
    • 使用过滤器来自定义扫描
      • @ComponentScan 添加include-filter exlude-filter参数
  • JSR-330 规范注解
    • 依赖注入标准规范
    • @Inject 可代替@Autowired
    • @Named @MangedBean
      • 可代替@Compoent
  • 基于Java的容器配置
    • Java配置支持的核心是@Configuration 注解的类和@Bean 注解的方法
    • AnnotaitonConfigApplicationContext
      • 与Spring xml 配置作为输入实例化ClassPathXmlApplication的过程相似, @Configuration注解的类可以作为AnnotaitonConfigApplicationContext的输入,这样允许spirng容器中完全不使用xml
    • 使用 register(Class<?>…) 编程式构造容器
      • AnnotaitonConfigApplicationContext 可以用无参构造,再用register注册组件
    • 使用scan 开启扫描组件
      • AnnotaitonConfigApplicationContext的scan方法
    • 指定bean的scope
    • 自定义bean命名
      • @Bean(name=”xx”)
    • bean 描述
    • @Import
      • 允许从其他配置类中加载@Bean 的配置
    • @ImportResource
      • 使用xml配置
  • 环境抽象
    • Environment
      • profile
        • 包含了多个bean定义的一个逻辑集合,当指定profile被激活,其中的bean被激活
        • @Profile
          • 在@Configuration注解的类或其方法使用
        • xml配置profile
        • 激活profile
          • ApplicationContext类的getEnviroment(). setActiveProfiles(“dev”)方法,支持多个,逗号分隔
          • 可以通过spring.profiles.active中的属性,支持多个,逗号分隔
        • 默认profile
          • 没有其他被激活,那么默认profile会被激活
      • properties
        • @PropertySource(“”)
          • 提供了一种简单的机制将PropertySource 增加到spring的Environment
          • 参数中形如${..}的占位符 都可以被解析为Environment中的属性资源
  • 国际化
  • 事件与监听器

    • Spring标准事件
      • ContextRefreshedEvent
        • 当ApplicationContext被初始化或刷新时触发
      • ContextClosedEvent
        • ApplicationContext被关闭
      • RequestHandleEvent
        • http请求结束时
      • ContextStartedEvent
        • 容器调用start方法时触发
      • ContextStopEvent
        • 容器调用stop方法
    • 自定义事件
      • 只要继承ApplicationEvent即可
      • 触发需要ApplicationEventPublisher上调用publishEvent
      • 通常通过创建一个实现ApplicationEventPublisherAware的类,注册成一个bean来完成
      • 接收自定义的ApplicationEvent
        • 实现ApplicationListener
      • 基于注解的事件模型
        • @EventListener
        • 异步处理事件
          • @Async
          • 不能发送回复
          • 如果需要发送另一个事件作为处理的结果,需要注入ApplicationEventPublisher 手动发动事件

            AOP编程

  • 概述

    • Aspect
      • 将关注点进行模块化,某些可能横跨多个对象
      • @Aspect或基于模式的方法 来实现切面
    • Join Point
      • 在程序执行中某个特定的点, 如方法调用时或处理异常时
    • Adivce
      • 某个特定的连接点上执行的动作
      • 包括 around before after 等通知
      • spring 有 Before Advice, After Returning Advice,After Throwing Advice,After finally Advice ,Around Advice,
    • Pointcut
      • 匹配连接点的断言,
      • 通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行
    • Introduction
    • TargetObject 被一个或多个切面所通知的对象
    • AOP Proxy
      • JDK动态代理
      • CGLIB代理
    • Weaving
      • 把切面连接到其他应用程序类型或对象上,并创建一个Advised的对象
    • 使用
      • 使用@AspectJ
        • @Pointcut
        • @Before
        • @AfterReturning
      • 基于XML 的AOP
    • 理解代理机制

      资源处理

  • 资源接口

    • Resource
  • 内置资源接口实现
    • UrlResource
    • ClassPathResource
    • FileSystemResource
    • ServletContextResouce
    • InputStreamResource
    • ByteArrayResource
  • ResourceLoader
  • ResourceLoaderAware

Bean 验证

  • Validator接口

表达式SpEL

  • EpressionParser
    • SpelEpxpression Parser
  • 对于bean 定义的支持
    • 和xml配合完成bean定义
    • 和注解配合完成bean定义
    • {}

  • 常用表达式
    • 文本表达式 单引号中
    • 属性 数组 列表 Map 索引器
      • 用点访问属性
      • 方括号数组
      • 内联列表 使用{}
      • 内嵌Map { key:value}
      • 数组构建
      • 方法
      • 运算符
      • 类型 T
      • 构造函数
      • 变量 #
      • 函数 registerFunction
      • Bean 引用 @ &
      • 三元运算符
      • Evlis
      • 安全导航运算符 避免空指针
      • 集合选择 .?[xxxx]
      • 集合投影 .![xxxx]
      • 表达式模板
  • 实战

    数据缓冲期和编解码器

  • 数据缓冲器

    • 引入是因为netty
    • DataBufferFactory
      • 有两种实现方式,一种为NettyDataBufferFactory 另一种为DefaultDataBufferFactory
    • DataBuffer
      • 类似ByteBuffer
      • 也有两种实现方式
  • 编解码器

    空安全

  • lang包

    • @NonNull
    • @Nullable
    • @NonNullApi
    • @NonNullFields

测试

微服务测试

  • mock与stub区别

    • 行为验证,与状态验证

      集成测试

  • 主要支持以下功能

    • 在测试执行之间管理Spring IoC 容器缓存
    • 提供测试夹具实例的依赖注入
    • 提供适合集成测试的事务管理
    • 提供特定于spring的基类
  • 上下文管理与缓存
    • 加载上下文费时
    • spring TestContext 提供了spring applicationContexts 和WebApplicationContexts的一致加载和这些上下文的缓存
  • 测试夹具的依赖注入
  • 事务管理
    • 测试创建执行后,回滚事务
  • @BootstrapWith
    • 用于引导Spring TestContext 框架,用于指定一个自定义的TestContextBootstraper
  • @ContextConfiguration
    • 声明应用程序上下文资源位置,或将用于加载上下文的注解类
  • @WebAppConfiguration
    • 用于声明加载的ApplicationContext是一个WebApplicationContext
  • @ContextHierarchy
  • @ActiveProfiles
  • @TestPropertySource
  • @DirtiesContext
  • @TestExecutionListeners
  • @Commit
  • @Rollback
  • @BeforeTransaction
  • @AfterTransaction
  • @Sql
  • @SqlConfig
  • @SqlGroup
  • 标准注解
  • spring junit4 注解
    • @IfProfileValue
    • @ProfileValueSourceConfiguration
    • @Timed
    • @Repeat
  • spring junit5 即Jupiter
    • @SpringJunitConfig
    • @SpringJunitWebConfig
    • @EnableIf
    • @DisableIf
  • 元注解

    Spring TestContext框架

  • 核心抽象

    • TestContext
    • TestContextManager
      • 是spring TestContext的主要入口
      • 在定义良好的测试执行点向每个注册的TestExecutionListener 发信号通知事件
      • 执行点
        • 在特定测试框架的所有before class 或before all 方法之前
        • 测试实例后处理
        • 在特定测试框架所有before 或before each 方法之前
        • 在测试方法执行之前,但在测试设置之后
        • 在测试方法执行之后,但在测试关闭之前立即执行
        • 在任何一个特定测试框架的每个after或after each 方法之后
        • 在任何一个特定测试框架的每个after class或after class 方法之后
    • TestExecutionListener
      • 用于响应TestConextManager发布的测试执行事件
    • ContextLoader
      • 用来加载ApplicationContext
      • SmartContextLoader
      • 实现
        • DelegatingSmartContextLoader
        • WebDelegatingSmartContextLoader
        • AnnotationConfigContextLoader
        • AnnotationConfigWebContextLoader
        • GenericGroovyXmlContextLoader
        • GenericGroovyXmlWebContextLoader
        • GenericXmlContextLoader
        • GenericXmlWebContextLoader
        • GenericProperttiesContextLoader
    • 引导TestContext
      • TestContextBootstrapper 定义了用于引导TestContext框架的SPI
      • 建议不要直接实现此接口,而是扩展其已实现的类
    • TestExcutionListener 配置
      • 默认的实现类
        • ServletTestExcutionListener
        • DirtiestContextBeforeModesTestExecutionListener
        • DependencyInjectionTestExectionListener
        • DirtiesContextTestExecutionListener
        • TransactionTestExecutionListenner
        • SqlScriptsTestExecutionListenner
    • 上下文管理
      • 每个TestContext 为他所负责的测试实例提供上下文管理和缓存支持
      • 一个测试类实现ApplicationContextAware接口,那么可以访问ApplicationContext
      • 可以用@Autowired来替代实现ApplicationContextAware
      • 加载上下文
        • @ContextConfiguration
    • 测试夹具的依赖注入
    • 如何测试request bean 和session bean
      • xx
    • 事务管理