Spring的一些面试题

1. 什么是spring,spring由哪些功能组成?

spring是分层的JavaEE\SE应用轻量级开源框架,spring在mvc三层当中为各个层级提供了相应的解决方案,例如:针对所有层级都基于IOC与DI的思想;在表现层有springmvc,也可集成struts、struts2,在业务层中IOC与DI可派上用场;在持久层可使用spring提供的JDBCTemplate,也可集成使用Mybatis。
spring以IOC容器为核心 + AOP面向切面 + 与浏览器进行交互的web模块(提供springmvc、struts、jsps、pdf、转excel服务)+ 与数据库交互的jdbc与事务操作 + ORM对象关系映射模块 + JEE常用服务模块(例如消息、邮件、远程调用等服务)。

2. spring配置bean实例化有哪些方式?

有三种方式

  • 第一种是通过类中的无参构造来实现,在ioc容器中配置<bean>标签,实例化出的对象默认是单例模式,生命周期与ioc容器一致;当然也可配置成多例模式,多例模式下的bean会在被需要时才被实例化;<bean>中也可通过<propoty>来set属性值,调用属性的set方法。
  • 第二种通过类中的实例方法来实现,类中需要构造一个实例方法,返回该类的实例,可在<bean>
    中配置factory-method = "方法名称" factory-bean = "bean唯一标识",让spring调用该方法获取实例。
  • 第三种通过类中静态方法来实现,一样要在类中写一个静态方法返回该类实例,配置factory-method = "方法名称"来获取实例。

3. 你对Spring IOC和DI的理解,它们有什么区别?

简单来说IOC就是将指定的实例化对象都放入ioc容器中;DI就是在某一个需要另一个类的引用时,spring通过set注入、构造器注入或自动注入该类的引用;
之前写的理解IOC与DI的文章

4. 描述下什么是AOP和AOP的实现原理?

AOP是面向切面编程,譬如说要在指定的方法中加上相应日志信息,可以将要加上的日志功能视为切面,指定的方法视为切点,配置切面类,配置切面的相应方法,即可实现AOP。AOP底层思想是动态代理,spring判断当前的被代理类是否实现接口,如果实现某个接口则底层使用基于接口的动态代理,否则使用基于子类的动态代理。

5. 描述下SpringMVC的核心组件和处理流程

SpringMVC的五大核心组件:DispatcherServlet、handlerMapping、Conrtroller、ModelAndView、ViewResolver

–>第一核心组件DispatcherServlet,所有来自浏览器的请求都会进入该servlet,加载ioc容器与mvc配置文件,实例化必须的bean(例如请求映射器、控制器、视图解析器)
–> 再进入handlerMapping进行请求映射
–> 进入prehandle()拦截器
–> 进入控制器目标方法之前会实例化出modelandview对象等其他需要服务数据的类,将请求数据给予modelandview进而赋予给方法中的参数列表,进入目标方法,方法返回的数据与视图信息也会存入modelandview,数据进而存入request当中
–> 进入posthandle()
–> 视图信息给视图解析器,拼接前缀与后缀形成页面的url,返回给浏览器。

6. 描述下Spring常用注解和其作用(至少6个)

7. 描述下Mybatis中${}和#{}的区别?

#{}是以预编译的形式将参数设置到sql语句中
${}是直接取出参数值拼接在sql中,会引发sql注入问题

8. 什么是ORM?

9. 在Mapper中如何传递多个参数?

用集合封装参数
用注解@param("")指定参数名

10. DI有几种方式、分别是什么,你常用的是哪种方式?

三种方式

  • 第一种利用set方法将值或引用注入给bean中属性<bean>中加入<propoty>来注入value或是ref引用。
  • 第二中利用有参构造方式注入属性<bean>中配置<constructor-arg name="" value/ref = "">来注入,还可利用index与type属性来指定参数索引位置与参数数据类型。
  • 第三中就是用的最多的自动注入,用注解也行,在<bean>中配置autowire属性也行,autowire取值可以是byname、bytype、constructor,分别通过set、类型、构造器来自动注入。

11. 谈谈你对MVC的理解?

MVC三层由Controller控制层、View视图层、Model模型层组成,视图层是直接显示给用户看的,用户可以点击按钮获取结果数据,控制器层会接收用户的请求并返回相应的结果数据,模型层相当于JavaBean实体类,实体类封装了一个类特有的属性,可再不同类中进行使用,提高了代码的复用性.一个项目分了三层之后,每一层的代码都有自己特定的功能和逻辑,这样很好的降低了代码之间的耦合度,也提高了代码的扩展性,如果以后想修改某一层里的内容,其他层不一定需要修改,也提高了维护性

12. 简要说明SSM框架搭建步骤?

web xml中先行配置DispatcherServlet,init-param引入springmvc配置文件,配置监听引入spring配置文件,配置utf-8过滤器;当然springmvc配置与spring配置合在一个配置文件也行。
在springmvc中配置扫包,只扫controller包,配置视图解析器,不用@requestMapping的话加配handlerMapping,用注解就开启mvc注解驱动。
spring配置中一样扫包,除去controller包,配置数据源,配置mybatis的sqlsessionfactory、mapperScannerConfigurer;mybatis配置多的话分一个mybtis-config出来,sqlsessionfactory中引入该配置文件。

发布了13 篇原创文章 · 获赞 3 · 访问量 964

猜你喜欢

转载自blog.csdn.net/qq_38599840/article/details/105499347