首页 > 技术文章 > SSM框架知识点

codingLiu 2020-04-24 18:10 原文

什么是Spring框架:

Spring是一种轻量级开源开发框架,是一个用来约束和提供支持的半成品应用

 

Spring中重要的模块:

  • Spring Core:Spring的基础,可以说Spring其他所有的功能都需要依赖于该类库,主要提供IOC依赖注入功能
  • Spring Aspect:该模块为AspectJ的集成提供支持
  • Spring AOP:提供了面向切面编程的实现
  • Spring JDBC:Java数据库的连接
  • Spring ORM:用于支持Hibernate等ORM工具
  • Spring Web:为创建web应用提供支持
  • Spring Test:提供了对JUnit和TestNG测试的支持

 

使用Spring框架的好处:

  • 控制反转IOC:Spring通过控制反转实现了松散耦合,不需要管理对象,丢给IOC容器即可,还方便管理应用中对象的生命周期和配置
  • 面向切面编程AOP:面向切面编程,把应用业务逻辑和系统服务分开

 

Spring Bean作用域:

  • singleton:当bean的作用域为单例时,Spring会在IOC容器对象创建时就创建bean对象
  • prototype:当bean的作用域为prototype时,IOC容器在获取bean实例时创建bean的实例对象,每次调用getBean()时都会返回一个新的实例
  • request:每次HTTP请求都会创建一个新的bean,该作用域仅适用于WebApplicationContext中
  • session:同一个HTTP session共享一个Bean,不同的session使用不同的Bean。

SpringIOC:

IOC(Inversion of Control)控制反转,是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架管理来管理。IOC容器是Spring用来实现IOC的载体,IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。

将对象之间的相互依赖关系交给IOC容器管理,并由IOC容器完成对象的注入。很大程度上简化开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂,当我们需要创建一个对象时,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。

IOC的思想在于,资源不由使用的双方进行管理,而由不使用资源的第三方管理,这可以带来很多好处,一,资源集中管理,实现资源的的可配置和易管理。二,降低了使用资源双方的依赖程度,就是耦合性。

栗子:行李箱-》箱体-》底盘-》轮子

Spring AOP:

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

Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,如果没实现接口,Spring AOP将会采用Cglib来生成AOP代理类。

Spring AOP 和 AspectJ AOP,Spring AOP属于运行时增强,而AspectJ是编译时增强,Spring AOP基于代理,而AspectJ基于字节码操作,Spring AOP已经集成了AspectJ,AspectJ应该算是Java生态中最完整的AOP框架了。

 

将一个类声明为Spring的bean的注解有哪些:

  • @Component,通用注解,可标注任意类为Spring组件。如果一个bean不知道属于那一层,可以使用@Conponent注解标注
  • @Repository,对应持久层即DAO层,主要用于数据库相关操作
  • @Service,对应服务层,主要涉及一些复杂的逻辑,需要用到DAO层
  • @Controller,对应Spring MVC控制层,主要用于接受用户请求并调用Service层返回数据给前端页面。

 

@Component和@Bean区别

  • 前者作用于类,后者作用于方法
  • @Component通常是通过类路径扫描来自动装配到Spring容器中,@Bean注解通常是我们在标有该注解的方法中定义生成这个bean
  • @Bean比前者自定义更强,很多时候只能通过@Bean注解来注册bean,比如我们引用第三方库中的类需要装配到Spring时,只能使用bean。

Spring中的bean生命周期:

 

Spring MVC:

MVC是一种设计模式,Spring MVC是一个很优秀的MVC框架,天生与Spring框架集成。Spring MVC下我们一般把后端项目分为Service层(处理业务)、DAO层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台)

Spring MVC工作原理:

流程说明:

  1. 客户端发送请求,直接请求到DispatcherServlet
  2. DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler
  3. 解析到对应的Handler(Controller)后,开始由HandlerAdapter适配器处理
  4. HandlerAdapter会根据Handler来调用真正的处理器处理请求,并处理相应的业务逻辑
  5. 处理完业务逻辑会返回一个ModelAndView,Model是返回的数据对象,View是一个逻辑上的View
  6. ViewResolver会根据逻辑View查找实际的View
  7. DispatcherServlet把返回的Model传给View(视图渲染)
  8. 把View返回给请求者

Spring中用了哪些设计模式:

  • 工厂模式,Spring使用工厂模式通过BeanFactory、ApplicationContext创建bean对象
  • 代理模式:Spring AOP功能实现
  • 单例模式:Spring中的Bean默认都是单例
  • 观察者模式:Spring事件驱动模型就是观察者模式的一个经典应用
  • 包装器模式:连接多个数据库,访问不同的数据库,这种模式可以让我们根据客户需求动态的切换数据源

 

Spring管理事务方式:

  1. 编程式事务,在代码中硬编码
  2. 声明式事务,再配置文件中配置

声明式事务:

  1. 基于XML的声明事务
  2. 基于注解的声明式事务

Spring事务中的隔离级别有几种:

  1. TransactionDefinition.ISOLATION_DEFAULT:使用数据库的默认隔离级别
  2. TransactionDefinition.ISOLATION_READ_UNCOMMITED:允许°尚未提交的数据,可能产生脏读、幻读、不可重复度问题
  3. TransactionDefinition.ISOLATION_READ_COMMITED:允许读已提交的数据,会产生幻读和不可重复度问题
  4. TransactionDefinition.ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据本身被修改。有幻读的可能
  5. TransactionDefinition.ISOLATION_SERIALIZABLE:最高隔离级别,不允许并发,所有事物依次执行

 

推荐阅读