侧边栏壁纸
博主头像
敢敢雷博主等级

永言配命,自求多福

  • 累计撰写 57 篇文章
  • 累计创建 0 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Spring简述

敢敢雷
2020-03-16 / 0 评论 / 0 点赞 / 1,448 阅读 / 4,061 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我删除。

image.png

什么是Spring Framework

Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度。它是轻量级、松 散耦合的。它具有分层体系结构,允许用户选择组件,同时还为 J2EE 应用程序 开发提供了一个有凝聚力的框架。它可以集成其他框架,如 Structs、Hibernate、 EJB 等,所以又称为框架的框架。

Spring Framework的优点

Spring Frameworks 的分层架构,用户可以自由选择自己需要的组件。 Spring Framework 支持 POJO(Plain Old Java Object) 编程,从而具备持续集 成和可测试性。由于依赖注入和控制反转,JDBC 得以简化。它是开源免费的。

Spring Framework有哪些不同的功能

  • 轻量级
    Spring 在代码量和透明度方面都很轻便。
  • IOC
    控制反转
  • AOP
    面向 切面编程可以将应用业务逻辑和系统服务分离,以实现高内聚
  • 容器
    Spring 负 责创建和管理对象(Bean)的生命周期和配置
  • MVC
    对 web 应用提供了高 度可配置性,其他框架的集成也十分方便
  • 事务管理
    提供了用于事务管理的通 用抽象层。Spring 的事务支持也可用于容器较少的环境

什么是Spring配置文件

Spring 配置文件是 XML 文件。该文件主要包含类信息。它描述了这些类是如何 配置以及相互引入的。但是,XML 配置文件冗长且更加干净。如果没有正确规划 和编写,那么在大项目中管理变得非常困难。

Spring应用程序有哪些不同的组件

Spring 应用一般有以下组件:

  • 接口 - 定义功能。
  • Bean 类 - 它包含属性,setter 和 getter 方法,函数等。
  • Spring 面向切面编程(AOP) - 提供面向切面编程的功能。
  • Bean 配置文件 - 包含类的信息以及如何配置它们。
  • 用户程序 - 它使用接口。

什么是Spring IOC容器?

Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它 们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的 组件。容器通过读取提供的配置元数据来接收对象进行实例化,配置和组装的指 令。该元数据可以通过 XML,Java 注解或 Java 代码提供。

什么是依赖注入

在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码 中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由 IoC 容器将它们装配在一起。

可以通过什么方式完成依赖注入

  1. 构造方法注入
  2. setter注入
  3. 接口注入

在Spring Framework中,仅使用构造函数和setter注入

Spring的ioc容器

  • BeanFactory
    BeanFactory 就像一个包含 bean 集合的工厂类。它会在客户端 要求时实例化 bean。
  • ApplicationContext
    ApplicationContext 接口扩展了 BeanFactory 接口。它 在 BeanFactory 基础上提供了一些额外的功能。

区分BeanFactory和ApplicationContext

  1. BeanFactory使用的懒加载,ApplicationContent使用即时加载
  2. BeanFactory不支持基于依赖的注解,ApplicationContent支持基于依赖的注解

IOC的好处

  1. 它将最小化引用程序中的代码量
  2. 将使应用程序易于测试,因为它不需要单元测试用例中的任何单例
  3. 它以最小的影响和最少的侵入机制促进松耦合
  4. 它支持即时的实例化和延迟加载服务

Spring IOC的实现机制

Spring中的IOC的实现原理就是工厂模式加反射机制

什么是Spring Bean

  1. 它们是构成用户应用程序主干的对象
  2. Bean由IOC容器管理
  3. 它们由Spring IOC容器实例化,配置,装配和管理
  4. Bean是基于用户提供给容器的配置元数据创建

Spring提供哪些配置方式

  • 基于xml配置
    bean 所需的依赖项和服务在 XML 格式的配置文件中指定。这些配置文件通常 包含许多 bean 定义和特定于应用程序的配置选项。它们通常以 bean 标签开头。
  • 基于注解配置
    可以通过在相关的类,方法或字段声明上使用注解,将 bean 配置为组件类本身,而不是使用 XML来描述bean装配。默认情况下,Spring容器中未打开 注解装配。因此,需要在使用它之前在 Spring 配置文件中启用它。
  • 基于java API配置
    Spring 的 Java 配置是通过使用 @Bean 和 @Configuration 来实现
  1. @Bean注解扮演与< bean/ >元素相同的角色
  2. @Configuration类允许通过简单地调用同一个类中的其他@Bean方法来定义bean间依赖关系

Spring中的bean Scope

Spring Bean支持5种scope

  • Singleton(单例)
    每个 Spring IoC 容器仅有一个单实例
  • Prototype(原型)
    每次请求都 会产生一个新的实例
  • Request
    每一次 HTTP 请求都会产生一个新的实例,并 且该 bean 仅在当前 HTTP 请求内有效
  • Session
    每一次 HTTP 请求都会产 生一个新的 bean,同时该 bean 仅在当前 HTTP session 内有效
  • Global-session
    类似于标准的 HTTP Session 作用域,不过它仅仅在基于 portlet 的 web 应用中才有意义

仅当用户使用支持 Web 的 ApplicationContext 时,最后三个才可用。

Spring Bean容器的生命周期

  1. Spring容器根据配置中的bean定义实例化bean
  2. Spring使用依赖注入填充所有属性
  3. 如果 bean 实现 BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用 setBeanName()
  4. 如果 bean 实现 BeanFactoryAware 接口,工厂通过传 递自身的实例来调用 setBeanFactory()
  5. 如果存在与 bean 关联的任何 BeanPostProcessors,则调用 preProcessBeforeInitialization() 方法
  6. 如果为 bean 指定了 init 方法( < bean > 的 init-method 属性),那么将调用它
  7. 最后,如果存在与 bean 关联的任何 BeanPostProcessors,则将调用 postProcessAfterInitialization() 方法
  8. 如果 bean 实现 DisposableBean 接口,当 spring 容器关闭时,会调用 destory()
  9. 如果为 bean 指定了 destroy 方法( < bean > 的 destroy-method 属性),那么将 调用它。

Spring内部Bean

只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean。 为了定义 bean,Spring 的基于 XML 的配置元数据在
中提供了 元素的使用。内部 bean 总是匿名 的,它们总是作为原型。

Spring装配

当 bean 在 Spring 容器中组合在一起时,它被称为装配或 bean 装配。Spring 容器需要知道需要什么 bean 以及容器应该如何使用依赖注入来将 bean 绑定 在一起,同时装配 bean

自动装配有哪些方式

Spring 容器能够自动装配 bean。也就是说,可以通过检查 BeanFactory 的内 容让 Spring 自动解析 bean 的协作者
自动装配不同模式:

  • no
    这是默认设置,表示没有自动装配。应使用显式 bean 引用进行装配
  • byName
    它根据 bean 的名称注入对象依赖项。它匹配并装配其属性与 XML 文件中由相同名称定义的 bean
  • byType
    它根据类型注入对象依赖项。如果属 性的类型与 XML 文件中的一个 bean 名称匹配,则匹配并装配属性。构造函数 - 它通过调用类的构造函数来注入依赖项。它有大量的参数
  • autodetect
    首先 容器尝试通过构造函数使用 autowire 装配,如果不能,则尝试通过 byType 自 动装配。

自动装配有什么局限性

  • 覆盖的可能性
    始终可以使用 < constructor-arg > 和 < property > 设 置指定依赖项,这将覆盖自动装配
  • 基本元数据类型
    简单属性(如原数据类型, 字符串和类)无法自动装配

基于注解的容器配置

不使用 XML 来描述 bean 装配,开发人员通过在相关的类,方法或字段声明上 使用注解将配置移动到组件类本身。它可以作为 XML 设置的替代方案。
例如

@Configuration
public class StudentConfig {
@Bean
public StudentBean myStudent() {
return new StudentBean(); }
}

Spring启动注解装配

默认情况下,Spring 容器中未打开注解装配。因此,要使用基于注解装配,我们 必须通过配置 < context:annotation-config/ > 元素在 Spring 配置文件 中启用它。

@Component,@Controller,@Repository,@Service 区别

  • @Component
    这将 java 类标记为 bean。它是任何 Spring 管理组件的通 用构造型。spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中
  • @Controller
    这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中
  • @Service
    此注解是组件注解的特化。它不 会对 @Component 注解提供任何其他行为,一般在服务层使用@Service,而不是 @Component,因为它以更好的方式指定了意图
  • @Repository
    这个注解是具有类似用途和功能的 @Component 注解的特 化。它为 DAO 提供了额外的好处。它将 DAO 导入 IoC 容器,并使未经检查 的异常有资格转换为 Spring DataAccessException

@Required注解作用

@Required 应用于 bean 属性 setter 方法。此注解仅指示必须在配置时使用 bean 定义中的显式属性值或使用自动装配填充受影响的 bean 属性。如果尚未 填充受影响的 bean 属性,则容器将抛出 BeanInitializationException。

@Autowired注解作用

@Autowired 可以更准确地控制应该在何处以及如何进行自动装配。此注解用于 在 setter 方法,构造函数,具有任意名称或多个参数的属性或方法上自动装配 bean。默认情况下,它是类型驱动的注入

@Qualifier注解作用

当创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可 以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义。

@RequsetMapping注解作用

@RequestMapping 注解用于将特定 HTTP 请求方法映射到将处理相应请求的
控制器中的特定类/方法。此注释可应用于两个级别:

  • 类级别
    映射请求的 URL
  • 方法级别
    映射 URL 以及 HTTP 请求方法

什么是AOP

AOP(Aspect-Oriented Programming), 即 面向切面编程, 它与
OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与 OOP 不同的抽象软件结构的视角. 在 OOP 中, 我们以类(class)作为我们的基 本单元, 而 AOP 中的基本单元是 Aspect(切面)

什么是Aspect

aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包 括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横 切逻辑编织到切面所指定的连接点中. AOP 的工作重心在于如何将增强编织目标 对象的连接点上, 这里包含两个工作

  1. 如何通过 pointcut 和 advice 定位到特定的 joinpoint 上
  2. 如何在 advice 中编写切面代码

可以简单的认为,使用@Aspect注解的类就是切面

什么是JoinPoint(切点)

程序运行中的一些时间点, 例如一个方法的执行, 或者是一个异常的处理.
在 Spring AOP 中, join point 总是方法的执行点

什么是Advice(通知)

特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice。Spring AOP 使用一 个 Advice 作为拦截器,在 JoinPoint “周围”维护一系列的拦截器

有哪些类型的Advice

  • Before
    这些类型的 Advice 在 joinpoint 方法之前执行,并使用 @Before 注解标记进行配置
  • After Returning
    这些类型的 Advice 在连接点方法正常执行后执 行,并使用@AfterReturning 注解标记进行配置
  • After Throwing
    这些类型的 Advice 仅在 joinpoint 方法通过抛出 异常退出并使用 @AfterThrowing 注解标记配置时执行
  • After
    这些类型的 Advice 在连接点方法之后执行,无论方 法退出是正常还是异常返回,并使用 @After 注解标记进行配置
  • Around
    这些类型的 Advice 在连接点之前和之后执行,并使用 @Around 注解标记进行配置

AOP有哪些实现方式

主要分为两大类

  • 静态代理
    指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类, 因此也称为编译时增强;
    • 编译时编织(特殊编译器实现)
    • 类加载时编织(特殊类加载器实现)
  • 动态代理
    在运行时在内存中“临时”生成AOP动态代理类,因此也称为运行时增强
    • JDK动态代理
    • CGLIB

如何理解Spring中的代理

将 Advice 应用于目标对象后创建的对象称为代理。在客户端对象的情况下,目 标对象和代理对象是相同的。

Advice + Target Object = Proxy

什么是weaving(编织)

为了创建一个advice对象而连接一个aspect和其他应用类型或对象称为weaving

Spring MVC框架的好处

Spring Web MVC 框架提供 模型-视图-控制器 架构和随时可用的组件,用于开 发灵活且松散耦合的 Web 应用程序。MVC 模式有助于分离应用程序的不同方 面,如输入逻辑,业务逻辑和 UI 逻辑,同时在所有这些元素之间提供松散耦合

DispatcherServlet工作流程

  1. 服务器发送 HTTP 请求,请求被前端控制器 DispatcherServlet 捕获
  2. DispatcherServlet 根据 -servlet.xml 中的配置对请求的 URL 进行解 析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对 象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回
  3. DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。(附注:如果成功获得 HandlerAdapter 后,此时将开始 执行拦截器的 preHandler(…)方法)
  4. 提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler ( Controller)。在填充 Handler 的入参过程中,根据你的配置,Spring 将 帮你做一些额外的工作
  • HttpMessageConveter
    将请求消息(如 Json、xml 等数据)转换 成一个对象,将对象转换为指定的响应信息
  • 数据转换
    对请求消息进行数据转换。如 String 转换成 Integer、 Double 等
  • 数据根式化
    对请求消息进行数据格式化。如将字符串转换成格式化数字 或格式化日期等
  • 数据验证
    验证数据的有效性(长度、格式等),验证结果存储到 BindingResult 或 Error 中
  1. Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象
  2. 根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已 经注册到 Spring 容器中的 ViewResolver)返回给 DispatcherServlet
  3. ViewResolver 结合 Model 和 View,来渲染视图
  4. 视图负责将渲染结果返回给客户端

什么是WebApplicationContent

WebApplicationContext 是 ApplicationContext 的扩展。它具有 Web 应用 程序所需的一些额外功能。它与普通的 ApplicationContext 在解析主题和决定 与哪个 servlet 关联的能力方面有所不同

0

评论区