Spring面试题问答模拟

1. Spring

1.1 什么是Spring

答:Spring是一个企业级应用的开源框架,主要用来开发java应用。Spring框架的目标是简化Java企业级应用开发。

1.2 Spring框架的好处 

答:
1、轻量:Spring是轻量级的
2、控制反转:Spring通过控制反转实现了松耦合,对象给出他们的依赖,而不是创建或查找依赖的对象们
3、面向切面编程:Spring支持面向切面的编程,并且把应用业务逻辑和系统分开
4、容器:Spring包含并管理应用中对象的生命周期和配置
5、MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架一个很好的替代品
6、事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务
7、异常处理:Spring提供方便的API把具体技术相关的异常转化为一直的unchecked异常

 1.3 Spring由哪些模块组成

答:
    IOC
    DAO
    MVC
    AOP
    ORM

 1.4 Spring有哪些不同的组件

答:
    1、接口-定义功能
    2、bean类-包含属性、setter和getter方法、函数等
    3、AOP-提供面向切面编程功能
    4、bean配置文件-包含类的信息以及如何配置他们
    5、用户程序-它使用接口

1.5 什么是SpringBean?

答:SpringBean是构成应用程序主干的对象,Bean基于用户提供给容器的配置元数据创建(例如xml文件、基于注解的配置、基于java的配置),由Spring IoC容器统一管理、实例化、配置、装配。

1.6 Spring Bean的生命周期

答:

总的来说有四个

  • 1、实例化 Instantiation

  • 2、属性赋值 Populate

  • 3、初始化 Initialization

  • 4、销毁 Destruction

具体来说:

  • 实例化bean:Spring容器根据配置中的bean定义实例化bean

  • 设置对象属性:Spring使用依赖注入填充所有的属性

  • 处理Aware接口:

    • 若bean实现了BeanNameAware接口,则工厂通过传递bean的id来调用setBeanName()

    • 若bean实现了BeanFactoryAware接口,工厂通过传递自身的实例来调用setBeanFactory()BeanPostProcessor:

    • 若存在于bean关联的任何BeanPostProcessor,则调用preProcessorBeforeInitilization()方法

  • Init:

    • 若bean指定了init方法,那么将调用它

  • BeanPostProcessors

    • 如果存在与bean关联的BeanPostProcessors,则将调用postProcessorAfterInitialization()方法

  • DisposableBean:

    • 如果bean实现DisposableBean接口,当容器关闭时,会调用

  • destory()

    • 如果为bean指定了destory方法,那么将调用它

 

1.7 SpringBean支持的几种bean的作用域

答:

  • 1、singleton:(默认的)在每个Spring IoC容器中,一个bean定义对应只会有唯一的一个bean实例。

  • 2、prototype:为每一个bean请求提供一个实例

  • 3、request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

    一个bean定义对应于单个HTTP 请求的生命周期。也就是说,每个HTTP 请求都有一个bean实例,且该实例仅在这个HTTP 请求的生命周期里有效。该作用域仅适用于WebApplicationContext环境。

  • 4、session:与request范围类似,确保每个session中有一个bean实例,在session过期后,bean会随之失效。

    一个bean 定义对应于单个HTTP Session 的生命周期,也就是说,每个HTTP Session 都有一个bean实例,且该实例仅在这个HTTP Session 的生命周期里有效。该作用域仅适用于WebApplicationContext环境。

  • 5、 global-session:全局作用域,global-session和Protolet应用相关。当应用部署在portlet容器中工作时,它包含很多portlet。如果想要声明让所有的portolet公用全局的存储变量的话,那么全局变量需要存储在global-session中。全局作用域与servlet中的session作用域效果相同。

1.8 什么是 Spring容器

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

1.9 Spring 有多少种IOC容器

答:BeanFactory:它会在客户端要求时实例化bean ApplicationContext:扩展了BeanFactory接口,它在BeanFactory基础上提供了一些额外功能。

1.10 什么是控制反转

答:IOC (Inversion Of Control)。它将对象交给了容器管理,开发者只需要在spring配置文件中配置相应的bean以及设置相应的属性,让spring容器来生成类的实例对象以及管理对象。

1.11 Ioc的好处

答:

  • 最小化程序中的代码量

  • 使程序易于测试

  • 松耦合

  • 支持即时实例化和延迟加载服务

1.12 Spring IOC容器实现机制

答:实现原理是工厂模式加反射机制

1.13 什么是依赖注入?

答:把需要的组件值设置到合适位置的过程叫依赖注入。

1.14 依赖注入的方式有哪几种?优缺点是什么

答:通常,依赖注入有三种方式,分别是:构造器注入,setter注入,接口注入。

  • 构造器注入:将被依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入

    • 优点:对象初始化完成后便可获得可使用的对象

    • 缺点:当需要注入的对象很多时,构造器参数列表会很长;不够灵活。若有多种注入方式,每种方式秩序注入指定几个依赖,那么就需要提供多个重载的构造函数

  • Setter注入:通过调用成员变量提供的setter函数将被依赖对象注入给依赖类

    • 优点:灵活,可以选择性的注入需要的对象

    • 缺点:依赖对象初始化完成后由于尚未注入被依赖对象,因此还不能使用

  • 接口注入:依赖类必须实现指定的接口,然后实现该接口中的一个函数,该函数就是用于依赖注入。该函数的参数就是要注入的对象

    侵入行:如果A类要是用别人提供的一个功能,若为了使用这功能,需要在自己的类中增加额外的代码,这就是侵入行

    • 优点:接口注入中,接口的名字、函数的名字都不重要,只要保证函数的参数是要注入的对象类型即可

    • 缺点:侵入行太强

1.15 什么是AOP

答:AOP是面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为切面(Aspect),减少系统中重复的代码,降低了模块间的耦合度,提高系统的可维护性。可用于权限认证、日志、事务处理

1.16 AOP的原理是什么

答:在使用 AOP 之后,Spring 容器返回的目标对象已经发生了改变,是采用动态 代理技术生成的一个子类对象。子类对象将父类方法进行了重写,重写方法中调 用父类原有功能+切入的组件功能。动态代理技术:JDK Proxy API 技术、CGLIB 技术。

1.17 什么是切点

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

1.18 什么是通知

答:特定的join point 出的Aspect所采用的动作称为Advice。Spring AOP 使用一个Advice作为拦截器, 在Join point 周围维护一系列的拦截器。

1.18 通知的类型有哪些

答:

1、Before – 在join point 方法之前执行 @Before注解进行配置
2、After Returning – 在切点方法正常执行后执行,@AfterReturning注解配置
3、After Throwing – 仅在join point方法通过抛出异常并退出时执行,@AfterThrowing
4、After(finally)- 在切点方法后执行,无论方法退出是正常还是异常返回,都可以执行,使用@After注解配置
5、Around – 在切点之前和之后执行,使用@Around注解进行配置

.19 什么是自动装配

答:当bean在Spring容器中组合在一起时,它被称为装配或bean装配。Spring容器能够自动装配相互合作的bean,这意味着容器不需要配置,能通过bean工厂自动处理bean之间的协作。

1.20 自动装配的方式

答:一共有5中装配方式

  • no :默认的方式,不进行自动装配,通过显示设置ref属性来进行装配。

  • byName:通过参数名自动装配,Spring容器在配置文件中发现bean的 autowire 属性被设置成byName,之后容器试图匹配、装配和该bean的属性具有相同名字的bean。

  • byType:通过参数类型自动装配,Spring容器在配置文件中发现bean的 autowire 属性被设置成byType,之后的容器试图匹配、装配和该bean的属性具有相同的类型的bean。如果有多个符合条件,则抛出错误。

  • constructor:类似byType,但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,抛出异常。

  • autodetect:首先尝试contructor来自动装配,如果无法工作,则使用byType方式。

1.21 自动装配的局限性

答:

  • 重写:仍需用和配置来定义依赖,这意味着总要重写自动装配。

  • 基本数据类型:你不能自动装配简单的属性,如:基本数据类型,String字符串 和 类。

  • 模糊特性:自动装配不如现实装配精确,如果有可能,建议使用显示装配。

1.22 @component、@Controller、@Service、@Respository的区别

答:

  • @Component :通用层注解,将java类标记为bean。它是任何Spring管理组件的通用构造型,Spring的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。

  • @Controller:控制层注解,将一个类标记为 Controller 控制器,标有它的bean会自动导入到IOC容器中。

  • @Service:服务层注解,主要用于服务层的类中,更好的指定意图,类似@Component。

  • @Respository:持久层注解,主要用于DAO层,他将DAO导入到容器, 类似@Component,使未经检查的异常有资格转换为SpringDataAccessException。

1.23 Autowired 和 Resource 的区别

答:

  • 共同点:都可以卸载字段和setter方法上,如果写在字段上,那么就不需要再写setter方法。

  • 不同点:

    • 1、默认按照byName自动注入

    • 2、有两个重要属性:name 和 type,Spring将其name属性解析为bean的名字,type属性解析为bean的类型。若既不定制name也不定制type,这时将通过反射机制使用byName自动注入

    • 3、@Resource装配顺序

    • 同时指定name和type,则从Spring上下文中找到唯一配配的bean进行装配,找不到则抛出异常

    • 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

    • 如果指定了type,则从上下文中找到类似的唯一bean进行装配,找不到或是找到多个,都会跑出异常

    • 既没指定name,有没指定type,则按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

    • 1、Spring提供的注解,需要导包

    • 2、按照类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果想是其按照名称来装配,可以结合@Qualifier一起使用。

    • @Autowired:

    • @Resource

一般情况下@Autowired 和 @Resource作用相同

1.24 SpringMVC是什么

答:

  • MVC设计模式是一种常用的软件架构方式:

    • V - View:视图层,为用户提供UI重点关注数据的呈现;

    • M - Model:模型层,业务数据的信息表示,关注支撑业务的信息构成,通常是多个业务实体的组合;

    • C - Controller:控制层,调用业务逻辑产生合适的数据(Model),传递数据给视图层用于呈现。

  • MVC的核心思想(本质)是业务数据抽取同业务数据呈现相分离

  • SpringMVC是一个基于MVC的web框架,属于Spring中的一个模块,它和Spring不需要通过中间层进行整合就可以一起使用。

1.25 SpringMVC的流程

答:

  • 1.发起请求到前端控制器(DispatcherServlet) - 2.前端控制器请求HandlerMapping查找Handler,可根据xml文件配置或者注解进行查找。- 3.处理器映射器HandlerMapping向前端控制器返回Handler。- 4.前端控制器调用处理器适配器去执行Handler。- 5.处理器适配器去执行Handler。- 6.Handler执行完给适配器返回ModelAndView。- 7.处理器适配器给前端控制器返回ModelAndView。ModelAndView是SpringMVC框架的一个底层对象,包括Model和View。- 8.前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图。- 9.视图解析器向前端控制器返回view。- 10.前端控制器进行视图渲染,将模型数据(ModelAndView对象中)填充到request域中。- 11.前端控制器向用户响应结果

1.26 SpringMVC框架有什么用

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

1.27 SpringMVC 常用的注解有哪些

答:

  • @RequestMapping:用于处理请求url映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

  • @ReruestBody:实现接收http请求的Json数据,将Json转换为Java对象。

  • @ResponseBody:将Controller方法返回对象转化为Json对象响应给客户。

1.28 Spring 支持的ORM

答:

  • Hibernate

  • Mybatis

  • JPA(Java Persistent API)

  • JDO(Java Data Object)

  • OJB

  • TopLink

1.29 spring支持的事务类型

答:两种

  • 1、程序化事务管理:在此过程中,在编程帮助下管理实务,灵活、维护困难

  • 2、声明式事务管理:事务管理和业务代码分离。仅适用注解或基于xml的配置来管理事务。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值