【面试】Spring 执行流程

Spring Aop的实现原理:

  1. AOP 的全称是  Aspect Orient Programming  ,即面向切面编程。是对 OOP (Object Orient Programming) 的一种补充,专门用于处理一些具有横切性质的服务。常常用于日志输出、、安全控制等。
  2. AOP(面向切面编程思想)主要是的实现技术有 Spring AOP  和  AspectJ。
    1. AspectJ 的底层技术:AspectJ 的底层技术是静态代理,即用一种AspectJ 支持的特定语言编写切面,通过一个命令来编译,生成一个新的代理类,该代理类增强了业务类,这是在编译时增i强,相对于下面说的运行时增强,编译时增强的性能更好。
    2. Spring AOP : Spring AOP 采用的是动态代理,在运行期间对业务方法进行增强,所以不会生成新类,对于动态代理技术,Spring AOP 提供了对 JDK 动态代理的支持以及 CFLib的支持。

JDK 动态代理只能为接口创建动态代理实力,而不能对类创建动态代理。需要获得被目标类的接口信息(应用 JAVA 的反射技术),生成一个实现了代理接口的动态代理类(字节码),再通过反射机制获得动态代理类的构造函数,利用构造函数生成动态代理类的实例对象,在调用具体方法前调用 invokeHandler 方法来处理。

  CGLib 动态代理需要依赖ASM包,把代理对象类的 class 文件加载进来,修改其字节码生成子类。

  但是 Spring AOP 基于注解配置的情况下,需要依赖于 AspectJ 包的标准注解,但是不需要额外的编译以及 AspectJ 的植入器,而基于 XML 配置不需要。



Spring ioc的实现原理:

  1. :控制反转也叫依赖注入,IOC利用java反射机制,AOP利用代理模式。所谓控制反转是指,本来被调用者的实例是有调用者来创建的,这样的缺点是耦合性太强,IOC则是统一交给spring来管理创建,将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。
    ----------------------------------------------------------------------------------------------
    原文链接:https://blog.csdn.net/monkeyduck/article/details/54344890


Spring的执行流程:

WEB 容器启动时,Spring 加载执行步骤

    1. 执行 Web.XML 中的 ContextLoaderListener 监听器
    2. 初始化 COntextLoaderListener 中的 ContextInitialized 方法
    3. ContextInitialized 方法中调用父类 ( ContextLoader ) 的 initWebAppcalicationContext 的方法
    4. initWebAppcalitionContext 方法中执行了三个任务
      1. 创建 WebApplicationContext 容器
      2. 加载 Context-Param 中配置的 Spring 配置文件
      3. 初始化配置文件中及创建配置文件中的 bean
    5. Web 容器停止时候会执行 ContextLoaderLoaderListener 的 ContextDesroyed 方法销毁 Context 容器  

原文地址:https://www.cnblogs.com/EveningWind/p/11393445.html

时间: 2024-10-14 16:43:24

【面试】Spring 执行流程的相关文章

Spring MVC 原理介绍(执行流程)

Spring MVC工作流程图 图一 图二  Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI).然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回: 3.

Spring 框架基础(06):Mvc架构模式简介,执行流程详解

本文源码:GitHub·点这里 || GitEE·点这里 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,MVC分层有助于管理和架构复杂的应用程序 M:代表模型Model 模型就是数据,应用程序的核心. V:代表视图View 回显数据的界面,例如JSP就是用来展示模型中的数据. C:代表控制器Controller 控制器的作

Spring MVC入门(一)—— SpringMVC的执行流程与常用注解

一.什么是SpringMVC SpringMVC就是类似于Struts2的mvc框架,属于SpringFrameWork的后续产品.在模型层中与视图层的交互部分. springMVC执行流程: 二.常用注解 1.RequestMapping注解类的使用方法 RequestMapping注解类的属性,分别有 value, method, consumes, produces, params, headers,这里介绍value属性: 代表具体的请求路径,比如上面的 /user, /login 都是

死磕 java线程系列之线程池深入解析——定时任务执行流程

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:本文基于ScheduledThreadPoolExecutor定时线程池类. 简介 前面我们一起学习了普通任务.未来任务的执行流程,今天我们再来学习一种新的任务--定时任务. 定时任务是我们经常会用到的一种任务,它表示在未来某个时刻执行,或者未来按照某种规则重复执行的任务. 问题 (1)如何保证任务是在未来某个时刻才被执行? (2)如何保证任务按照某种规则重复执行? 来个栗子 创建一个定时线程池,用它来

spring MVC流程

Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI).然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回: 3. DispatcherServlet 根据获得

SpringIOC_init和destory和执行流程

ApplicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/

Servlet、Struts2、SpringMVC执行流程

Servlet 有以下四个阶段: 1.加载和实例化 Servlet容器负责加载和实例化Servlet. 当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例. 当Servlet容器启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统.远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例. 因为容器是通过Java的反射API来创建 Servlet实例,

springMVC执行流程及原理

spring的MVC执行原理 1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作. 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewRes

struts2的执行流程与配置详解

本章主要讲解Struts的执行流程以及Struts的配置以及访问servletApi 全部代码下载: github链接:链接 写文章不易,欢迎大家采我的文章,以及给出有用的评论,当然大家也可以关注一下我的github:多谢: 1.Struts的执行流程: 1.服务器启动时: 加载项目web.xml 创建Struts核心过滤器对象, 执行StrutsPrepareAndExecuteFilter的doFilter 的 init()方法: 在StrutsPrepareAndExecuteFilter