Spring简答题

1:请解释下Spring框架中的IoC?

 Spring中的 org.springframework.beans 包和 org.springframework.context包构成了Spring框架IoC容器的基础。BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContex接口对BeanFactory(是一个子接口)进行了扩展,在BeanFactory的基础上添加了其他功能,比如与Spring的AOP更容易集成,也提供了处理message resource的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对Web应用的WebApplicationContext。

org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具体实现,用来包装和管理前面提到的各种bean。BeanFactory接口是Spring IoC 容器的核心接口。

---------------------------------------------------------------------------------------------------------------------------------

2:BeanFactory和ApplicationContext有什么区别?

BeanFactory 可以理解为含有bean集合的工厂类。BeanFactory 包含了种bean的定义,以便在接收到客户端请求时将对应的bean实例化。

BeanFactory还能在实例化对象的时生成协作类之间的关系。此举将bean自身与bean客户端的配置中解放出来。BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。

从表面上看,application context如同bean factory一样具有bean定义、bean关联关系的设置,根据请求分发bean的功能。但application context在此基础上还提供了其他的功能。

---------------------------------------------------------------------------------------------------------------------------------

3:IOC有什么优点?

IOC或依赖注入减少了应用程序的代码量。它使得应用程序的测试很简单,因为在单元测试中不再需要单例或JNDI查找机制。简单的实现以及较少的干扰机制使得松耦合得以实现。IOC容器支持勤性单例及延迟加载服务

---------------------------------------------------------------------------------------------------------------------------------

4:Spring应用程序看起来像什么?

一个定义功能的接口

实现包括属性,setter和getter方法,功能等Spring AOP 、Spring的XML配置文件

使用该功能的客户端编程

---------------------------------------------------------------------------------------------------------------------------------

5:Spring中的依赖注入是什么?

依赖注入作为控制反转(IOC)的一个层面,可以有多种解释方式。在这个概念中,你不用创建对象而只需要描述如何创建它们。你不必通过代码直接的将组件和         服务连接在一起,而是通过配置文件说明哪些组件需要什么服务。之后IOC容器负责衔接。

---------------------------------------------------------------------------------------------------------------------------------

6:如何向Spring 容器提供配置元数据?

有三种方式向Spring 容器提供元数据:

XML配置文件

基于注解配置

基于Java的配置

---------------------------------------------------------------------------------------------------------------------------------

7:如何定义bean的作用域?

在Spring中创建一个bean的时候,我们可以声明它的作用域。只需要在bean定义的时候通过’scope’属性定义即可。例如,当Spring需要产生每次一个新的bean实例时,应该声明bean的scope属性为prototype。如果每次你希望Spring返回一个实例,应该声明bean的scope属性为singleton。

---------------------------------------------------------------------------------------------------------------------------------

8:sprinmvc工作原理?:

1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。

2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.

3.DispatcherServlet请请求提交到目标Controller

4.Controller进行业务逻辑处理后,会返回一个ModelAndView

5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

6.视图对象负责渲染返回给客户端。

---------------------------------------------------------------------------------------------------------------------------------

9:什么是Spring MVC框架的控制器?

控制器提供对应用程序行为的访问,通常通过服务接口实现。控制器解析用户的输入,并将其转换为一个由视图呈现给用户的模型。Spring 通过一种极其抽象的方式实现控制器,它允许用户创建多种类型的控制器

---------------------------------------------------------------------------------------------------------------------------------

10:什么是@Qualifier 注解?

当有多个相同类型的bean而只有其中的一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用消除这种混淆,指明需要装配的bean。

---------------------------------------------------------------------------------------------------------------------------------

11:怎样开启注解装配?

注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在Spring配置文件中配置 <context:annotation-config/>元素。

---------------------------------------------------------------------------------------------------------------------------------

12:自动装配有哪些局限性 ?

重写: 你仍需用 <constructor-arg>和 <property> 配置来定义依赖,意味着总要重写自动装配。

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

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

---------------------------------------------------------------------------------------------------------------------------------

13:依赖注入有几种方式?

set注入

构造器注入

自动装配

---------------------------------------------------------------------------------------------------------------------------------

14:AOP的底层实现?

使用JDK动态代理

---------------------------------------------------------------------------------------------------------------------------------

15:请说明一下AOP中需要的最基本的三个类:

目标类 切面类 代理类

---------------------------------------------------------------------------------------------------------------------------------

16:写出spring中的注解及其含义(至少6个)

@Component 标识一个受Spring管理的组件

@Respository标识持久层

@Service 标识服务层

@Controller 标识控制层

@Autowired  它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作

@Qualifier 指定注入 Bean 的名称

---------------------------------------------------------------------------------------------------------------------------------

17:请说一下SpringMVC的执行流程?

1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作。

2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.

3.DispatcherServlet请请求提交到目标Controller

4.Controller进行业务逻辑处理后,会返回一个ModelAndView

5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

6.视图对象负责渲染返回给客户端。

---------------------------------------------------------------------------------------------------------------------------------

18:讲下SpringMvc和Struts1,Struts2的比较的优势?

性能上Struts1>SpringMvc>Struts2 开发速度上SpringMvc和Struts2差不多,比Struts1要高

---------------------------------------------------------------------------------------------------------------------------------

19:怎么样在方法里面得到Request,或者Session

直接在方法的形参中声明request,SpringMvc就自动把request对象传入

---------------------------------------------------------------------------------------------------------------------------------

20:SpringMVC怎么样设定重定向和转发的

在返回值前面加"forward:"就可以让结果转发,譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可以让返回值重定向,譬如"redirect:http://www.baidu.com"

---------------------------------------------------------------------------------------------------------------------------------

21:什么是Spring的MVC框架?

Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。

---------------------------------------------------------------------------------------------------------------------------------

22:DispatcherServlet的作用?

Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。

---------------------------------------------------------------------------------------------------------------------------------

23:WebApplicationContext是干什么的?

 WebApplicationContext 继承了ApplicationContext 并增加了一些WEB应用必备的特有功能,它不同于一般的ApplicationContext ,因为它能处理主题,并找到被关联的servlet。

---------------------------------------------------------------------------------------------------------------------------------

24:什么是Spring MVC框架的控制器?

控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。

---------------------------------------------------------------------------------------------------------------------------------

25:Spring 框架中都用到了哪些设计模式?

代理模式—在AOP和remoting中被用的比较多。

单例模式—在spring配置文件中定义的bean默认为单例模式。

模板方法—用来解决代码重复的问题。

比如. RestTemplate, JmsTemplate, JpaTemplate。

前端控制器—Srping提供了DispatcherServlet来对请求进行分发。

视图帮助(View Helper )—Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。

依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。

工厂模式—BeanFactory用来创建对象的实例。

---------------------------------------------------------------------------------------------------------------------------------

26:MVC是三层开发结构,这三个字母按顺序分别代表

Model、View、Controller

---------------------------------------------------------------------------------------------------------------------------------

27:请简述什么是MVC模式?

1、是一种开发软件工程的设计模式。

2、M即Model,模型,定义数据模型和业务模型,通常由javabean实现;

V即View,视图,定义与客户端进行交互的界面,通常由jsp,freemarker实现;

C即Controller,控制器,接收客户端请求并调用模型和视图处理请求,通常由servlet实现。

---------------------------------------------------------------------------------------------------------------------------------

28:请写出SpringMVC中的web.xml文件关于核心控制器的配置内容。[提示:DispatcherServlet]

答:如下所示:

  <servlet>

   <servlet-name>dispatcher</servlet-name>

   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

   <init-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:spring-*.xml</param-value>

   </init-param>

   <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

   <servlet-name>dispatcher</servlet-name>

   <url-pattern>*.action</url-pattern>

  </servlet-mapping>

---------------------------------------------------------------------------------------------------------------------------------

29:请简单描述SpringMVC框架的执行流程,要求条理清晰。

答:(1)客户端在提交请求后,服务器接收请求并转交给springmvc项目中的前端控制器DispatcherServlet;

(2)DispatcherServlet根据映射把请求转发给后端处理器Handler,Handler调用模型进行相应的处理;

(3)Handler处理器把处理后的结果封装到模型和视图对象[ModelAndView]中并返回到DispatcherServlet;

(4)DispatcherServlet再根据映射找到指定的视图jsp并对返回数据进行渲染;

(5)视图jsp把经过渲染之后的数据返回到DispatcherServlet;

(6)DispatcherServlet把最终的结果页面数据返回给客户端。

---------------------------------------------------------------------------------------------------------------------------------

30:如何理解ORM概念?请简单描述。

ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。

---------------------------------------------------------------------------------------------------------------------------------

31:ORM技术的特点是什么?

答:1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。

  1. ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

---------------------------------------------------------------------------------------------------------------------------------

32:在使用MyBatis的mapper方式时应注意哪些问题?

答:

(1)mapper映射与接口必须是相同的主文件名

(2)mapper映射与接口必须在相同的包中

(3)mapper映射中的命名空间属性[namespace]的值必须是mapper接口的全限定名称

(4)mapper映射中的操作元素的标识属性[id]的值必须是mapper接口中相应方法的名称

(5)如果需要输入参数,则mapper映射中的操作元素的parameterType属性的值必须是mapper接口中相应方法的形参类型的全称

(6)如果存在返回值参数,则mapper映射中的操作元素的resultType属性的值必须是mapper接口中相应方法的返回值类型的全称

---------------------------------------------------------------------------------------------------------------------------------

33:简述在使用测试框架JUnit时常用的注解有哪些并说明各自的作用?

答:

@Test(expected,timeout):定义测试用例,expected属性指定期望抛出的异常,timeout属性指定执行限定的时间,

单位是毫秒

@Before:定义在每个测试用例执行之前所执行的方法

@After:定义在每个测试用例执行之后所执行的方法

@BeforeClass:定义在所有测试用例执行之前所执行的静态方法

@AfterClass:定义在所有测试用例执行之后所执行的静态方法

---------------------------------------------------------------------------------------------------------------------------------

34:MyBatis编程步骤是什么样的?

① 创建SqlSessionFactory

② 通过SqlSessionFactory创建SqlSession

③ 通过sqlsession执行数据库操作

④ 调用session.commit()提交事务

⑤ 调用session.close()关闭会话

---------------------------------------------------------------------------------------------------------------------------------

35:Mybatis中如何执行批处理?

使用BatchExecutor完成批处理

---------------------------------------------------------------------------------------------------------------------------------

36:请简述Mybatis的工作流程 ?

(1) 加载配置并初始化

(2) 接收调用请求

(3) 处理操作请求 触发条件:API 接口层传递请求过来

(4)返回处理结果将最终的处理结果返回。

---------------------------------------------------------------------------------------------------------------------------------

37:请说明工作日志文件log4j.properties的内容应该如何编写? log4j.rootLogger=debug,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.conversionPattern=%d %p %c %m%n

---------------------------------------------------------------------------------------------------------------------------------

38:当实体类中的属性名和表中的字段名不一样如何解决?

通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致

<select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”>

select order_id id, order_no orderno ,order_price price form orders where order_id=#{id};

</select>

---------------------------------------------------------------------------------------------------------------------------------

39:Mybatis连接查询怎么实现?

使用@Results({

  @Result(column="关联查询的字段",property="对象",one = @One(select="完全限定名.方法名"))

 })

---------------------------------------------------------------------------------------------------------------------------------

40:mybatis-spring整合的时候 需要在Spring配置哪个bean?

SqlsessionfactoryBean

---------------------------------------------------------------------------------------------------------------------------------

41:MyBatis(IBatis)的好处是什么

ibatis把sql语句从Java源程序中独立出来, 放在单独的XML文件中编写,给程序的维护带来了很大便利。 ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象, 大大简化了Java数据库编程的重复工作。 因为Ibatis需要程序员自己去编写sql语句, 程序员可以结合数据库自身的特点灵活控制sql语句, 因此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询

---------------------------------------------------------------------------------------------------------------------------------

42:请写出4个动态SQL的元素?

if choose where set

---------------------------------------------------------------------------------------------------------------------------------

43:请说出动态SQL的作用:

动态SQL元素和使用JSTL或其他类型基于XML的文本处理器相似

Mybatis采用功能强大的OGNL表达式来完成

---------------------------------------------------------------------------------------------------------------------------------

44:Mybatis动态sql是做什么的?简述一下动态sql的执行原理?

Mybatis动态sql可以让我们在Xml映射文件内以标签的形式编写sql,完成逻辑判断和动态拼接sql的功能,其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。

---------------------------------------------------------------------------------------------------------------------------------

45:在实现分页技术时,通常需要设置哪些变量来说明与分页逻辑有关的参数?

答:当前页码;每页记录数;总记录数;总页数;当前页面数据。

---------------------------------------------------------------------------------------------------------------------------------

46:在实现分页时至少需要获取哪些数据?

答:当前页码,当前页,总记录数,总页数,当前数据

---------------------------------------------------------------------------------------------------------------------------------

47:请简要说明ResultMap标签中的各个属性的意义是什么?

答:(1)id属性 ,resultMap标签的标识。

(2)type属性 ,返回值的全限定类名,或类型别名。

(3)autoMapping属性 ,值范围true(默认值)|false, 设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在`resultMap`内明确注明映射关系才会调用对应的setter方法。

---------------------------------------------------------------------------------------------------------------------------------

48:在通过mybatis解决多个对象之间的关系时要使用关系映射,那么请简要描述当前我校的学生与班级的对应关系是什么?

答:从单向来看,一个学生只属于一个班级,这是单向一对一的关系;一个班级可以包含多个学生,这是单向一对多的关系。从双向来看,是双向一对多或双向多对一的关系。

---------------------------------------------------------------------------------------------------------------------------------

49:请简要说明在mybatis中的#{}与${}两者的区别是什么?

答:(1)在传递字符串参数时如果是做为全部参数则使用#{},如果是做为部份参数,即包含在单引号中时使用${};(2)如果参数是字段名称或数据库中的关键字时采用${}即可解决问题。

---------------------------------------------------------------------------------------------------------------------------------

50:请简要说明Spring框架与MyBatis框架在整合时需要配置的主要步骤是什么?

答:(1)配置数据源BasicDataSource;

(2)配置会话工厂SqlSessionFactoryBean;

(3)配置映射器的扫描器MapperScannerConfigurer。

---------------------------------------------------------------------------------------------------------------------------------

51:请简要说明Spring框架与SpringMVC框架在整合时需要配置的主要步骤是什么?

答:(1)指定控制器层所在的java包位置;

(2)启用MVC注解功能;

(3)通过InternalResourceViewResolver设置逻辑视图的前缀和后缀;

(4)创建并注册类型转换器ConversionServiceFactoryBean;

(5)注册CommonsMultipartResolver开启上传文件功能;

(6)配置SimpleMappingExceptionResolver启用异常处理功能

---------------------------------------------------------------------------------------------------------------------------------

52:请简要说明Spring框架管理业务层时需要配置的主要步骤是什么?

答:(1)指定业务层所在的java包位置;

(2)配置事务管理器DataSourceTransactionManager;

(3)启用事务功能或添加相应的事务注解@Transactional。

---------------------------------------------------------------------------------------------------------------------------------

53:如何设置Maven 的编译级别?

<build> 

    <plugins> 

        <plugin> 

            <groupId>org.apache.maven.plugins</groupId> 

            <artifactId>maven-compiler-plugin</artifactId> 

            <version>2.0.2</version> 

            <configuration> 

                <source>1.8</source> 

                <target>1.8</target> 

            </configuration> 

        </plugin> 

    </plugins> 

</build> 重要!!!!

---------------------------------------------------------------------------------------------------------------------------------

54:Maven 是什么?

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。

---------------------------------------------------------------------------------------------------------------------------------

55:安装Nexus的时候注意什么?

1.安装命令是Install

2.开启管理员权限的CMD

---------------------------------------------------------------------------------------------------------------------------------

56:maven相比其他传统项目的几大好处?

  1. maven统一管理包;2.对应用包的升级方便;3.开发项目不依赖与开发工具;4.集成编译,测试,打包,发布,部署,等一条龙服务;5.拥有各种插件

---------------------------------------------------------------------------------------------------------------------------------

57:请简要说明springmvc中的视图解析器InternalResourceViewResolver中常用的三个属性的作用?

答:(1);viewClass属性指明视图类型;

(2)prefix属性指明视图路径前缀;

(3)suffix属性指明视图路径后缀。

---------------------------------------------------------------------------------------------------------------------------------

58:手写两种单例模式

public class Singleton { 

    private static Singleton instance = new Singleton(); 

    private Singleton (){} 

    public static Singleton getInstance() { 

    return instance; 

    } 

public class Singleton { 

    private static Singleton instance; 

    private Singleton (){} 

    public static Singleton getInstance() { 

    if (instance == null) { 

        instance = new Singleton(); 

    } 

    return instance; 

    } 

}  ---------------------------------------------------------------------------------------------------------------------------------

59:如何在web.xml中设置编码?

<filter>

    <filter-name>CharacterEncodingFilter</filter-name>

        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

        <param-name>encoding</param-name>

        <param-value>utf-8</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>CharacterEncodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

---------------------------------------------------------------------------------------------------------------------------------

原文地址:https://www.cnblogs.com/iscurry/p/11865354.html