Spring简述

in Spring原理 with 0 comment

image.png

什么是Spring Framework

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

Spring Framework的优点

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

Spring Framework有哪些不同的功能

什么是Spring配置文件

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

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

Spring 应用一般有以下组件:

什么是Spring IOC容器?

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

什么是依赖注入

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

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

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

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

Spring的ioc容器

区分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提供哪些配置方式

  1. @Bean注解扮演与< bean/ >元素相同的角色
  2. @Configuration类允许通过简单地调用同一个类中的其他@Bean方法来定义bean间依赖关系

Spring中的bean Scope

Spring Bean支持5种scope

仅当用户使用支持 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 的协作者 自动装配不同模式:

自动装配有什么局限性

基于注解的容器配置

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

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

Spring启动注解装配

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

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

@Required注解作用

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

@Autowired注解作用

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

@Qualifier注解作用

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

@RequsetMapping注解作用

@RequestMapping 注解用于将特定 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

AOP有哪些实现方式

主要分为两大类

如何理解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 将 帮你做一些额外的工作
  1. Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象
  2. 根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已 经注册到 Spring 容器中的 ViewResolver)返回给 DispatcherServlet
  3. ViewResolver 结合 Model 和 View,来渲染视图
  4. 视图负责将渲染结果返回给客户端

什么是WebApplicationContent

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