zoukankan      html  css  js  c++  java
  • 【笔试题】Spring笔试题

    spring笔试题

    1.Spring支持的事务管理类型

    Spring支持两种类型的事务管理:

    • 编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
    • 声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。

    你更倾向用那种事务管理类型?

    • 大多数Spring框架的用户选择声明式事务管理,因为它对应用代码的影响最小,因此更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式允许你通过代码控制事务)少了一点灵活性。

    2.什么是控制反转(IOC)?什么是依赖注入?

    • 控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。

    • 控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用。

    • 依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。这就需要一种机制用来激活相应的组件以提供特定的功能,所以依赖注入是控制反转的基础。否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件?

    在Java中依赖注入有以下三种实现方式:

    • 1、构造器注入
    • 2、Setter方法注入
    • 3、接口注入

    控制反转依赖注入

    • 反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中。

    • 谁控制谁,控制什么,传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

    • 为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

    • IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

    3.Spring面向切面编程(AOP)

    • 解释AOP:面向切面的编程,或AOP, 是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。
    • Aspect 切面:AOP核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组API提供横切功能。比如,一个日志模块可以被称作日志的AOP切面。根据需求的不同,一个应用程序可以有若干切面。在Spring AOP中,切面通过带有@Aspect注解的类实现。

    4.spring工作流程

    Spring 工作流程如下:

    • 1.springmvc 请所有的请求都提交给 DispatcherServlet, 它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
    • 2.DispatcherServlet 查询一个或多个 HandlerMapping, 找到处理请求的 Controller。
    • 3.DispatcherServlet 请请求提交到目标 Controller。
    • 4.Controller 进行业务逻辑处理后,会返回一个 ModelAndView。
    • 5.Dispathcher 查询一个或多个 ViewResolver 视图解析器 ,找到 ModelAndView 对象指定的视图对象。
    • 6.视图对象负责渲染返回给客户端。

    优点:

    • 1.使用 Spring 的 IOC 容器,将对象之间的依赖关系交给 Spring,降低组件之间的耦合性,让我们更专注于应用逻辑。
    • 2.可以提供众多服务,事务管理, WS 等。
    • 3.AOP 的很好支持,方便面向切面编程。
    • 4.对主流的框架提供了很好的集成支持,如 Hibernate,Struts2,JPA 等。
    • 5.Spring DI 机制降低了业务对象替换的复杂性。
    • 6.Spring 属于低侵入,代码污染极低。
    • 7.Spring 的高度可开放性,并不强制依赖于 Spring,开发者可以自由选择 Spring 部分或全部。

    5.spring核心模块

    Spring框架是一个轻量级的集成式开发框架,可以和任何一种框架集成在一起使用,可以说是一个大的全家桶。Spring从1.x发展到现在的5.x可以说是越来越强大,下面来看看Spring都包含哪些核心的模块吧。
    Spring图中的这些模块,都至少由一个以上的jar包组成。

    • 1、Core Container - 核心容器

    spring-core:Spring中的核心工具类包。

    spring-beans:Spring中定义bean的组件。

    spring-context:Spring的运行容器。

    spring-context-support:Spring容器的扩展支持。

    spring-expression:Spring的表达式语言支持。

    • 2、AOP - 面向切面编程

    spring-aop:基于代理的AOP支持。

    spring-aspects:集成Aspects的AOP支持。

    • 3、WEB(MVC)

    spring-web:提供web的基础功能。

    spring-webmvc:提供springmvc的功能。

    spring-websocket:提供web socket支持。

    spring-webmvc-portlet:提供Portlet环境的支持。

    • 4、Data Access/Integration - 数据访问/集成

    spring-jdbc:提供对jdbc连接的封装功能。

    spring-tx:提供对事务的支持。

    spring-orm:提供对象-关系映射支持。

    spring-oxm:提供对象-XML映射支持。

    spring-jms:提供消息队列的支持。

    • 5、Test - 测试

    spring-test:提供对测试功能的支持。

  • 相关阅读:
    浏览器滚动条高度的获取与设置
    aspx页面 按钮不响应回车键
    HTML5 canvas 圆盘抽奖
    spark 解决大文件造成的分区数据量过大的问题
    简单http文件服务器 (Python)
    调试分析工具 (C/C++)
    案例学习——网站高并发处理相关技术
    一致性哈希
    Linux 环境下程序不间断运行
    案例分析——BAT业务https化经历
  • 原文地址:https://www.cnblogs.com/hgnulb/p/9469599.html
Copyright © 2011-2022 走看看