Spring相关知识

Spring 模块(4.x)

最新的5.x版本中Web模块的Portlet已经废弃, 同时增加了异步响应式处理的WebFlux组件。

  • Spring Core: 基础模块, Spring其它的功能都依赖于这个类库, 主要提供IOC依赖注入功能
  • Spring Aspects: 该模块与AspectJ的集成提供支持
  • Spring AOP: 提供了面向切面的编程实现
  • Spring JDBC: JAVA数据库连接
  • Spring JMS: JAVA消息服务
  • Spring ORM: 用于支持Hibernate等ORM工具
  • Spring Web:为了创建Web应用程序提供支持
  • Spring Test:提供了对Junit和TestNG测试支持

Spring IoC(工厂模式)

IoC 是一种设计思想, 将原本在程序中手动创建对象的控制权, 交由Spring框架来管理。

IoC容器是Spring用来实现IoC的载体, IoC容器实际上就是个Map(K, V), 存放各种对象。

IoC容器就像是一个工厂一样,当我们需要创建一个对象的时候, 只需要配置好配置文件或注解即可, 完全不用考虑对象是怎么被创建出来的。

为了更好地去了解IoC, 此处我需要补充几个知识点

依赖倒置原则: 把原本的高层建筑依赖底层建筑倒置过来, 变成底层建筑依赖高层建筑, 高层建筑需要什么, 底层建筑便去实现这样的需求, 高层并不需要管底层是怎么实现的, 这样就不会出现牵一发而动全身的情况。

DI(Dependecy Inject,依赖注入)是实现控制反转的一种设计模式,依赖注入就是将实例变量传入到一个对象中去

控制反转就是依赖倒置原则的一种代码设计思路, 具体方法是依赖注入。

Spring IoC有什么好处

AOP

AOP(面向切面编程)能够将那些与业务代码无关, 却为业务模块所共同调用的逻辑或责任(如事务处理、日志处理、权限控制等)封装起来, 以便于减少系统的重复代码, 降低模块间的耦合度, 并有利于未来的可拓展性和可维护性。

Spring AOP基于动态代理, 如果要代理的对象, 实现了某个接口, 那么Spring AOP就会使用JDK Proxy, 去创建代理对象, 没有接口的话,就无法使用JDK Proxy去代理, 此时便要使用Cglib

Spring AOP 与 AspectJ AOP

前者集成了后者, 前者比后者简单, 后者比前者强大

Spring AOP是运行时增强, AspectJ AOP是编译时增强

Spring 中的事务管理

  • 编程式事务:在代码中硬编码(不推荐使用)
  • 声明式事务:在配置文件中配置(推荐使用)

声明式事务又分为两种

  • 基于XML的声明式事务
  • 基于注解的声明式事务

Spring 事务中的隔离级别

  • TransactionDefinition.ISOLATION_DEFAULT: 使用后端数据库默认的隔离级别,Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别.
  • TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
  • TransactionDefinition.ISOLATION_READ_COMMITTED: 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
  • TransactionDefinition.ISOLATION_REPEATABLE_READ: 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • TransactionDefinition.ISOLATION_SERIALIZABLE: 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

Spring 设计模式

  • 工厂设计模式 : Spring使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
  • 代理设计模式 : Spring AOP 功能的实现。
  • 单例设计模式 : Spring 中的 Bean 默认都是单例的。
  • 模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
  • 包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
  • 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
  • 适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。

面试官:“谈谈Spring中都用到了那些设计模式?”。

参考

JavaGuide

本文标题:Spring相关知识

文章作者:Enda Lin

发布时间:2019年06月12日 - 16:26

最后更新:2019年07月08日 - 09:15

原始链接:https://wt-git-repository.github.io/2019/06/12/Spring相关知识/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。