Spring简答题
Posted xxing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
- 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相比其他传统项目的几大好处?
- 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>
---------------------------------------------------------------------------------------------------------------------------------
以上是关于Spring简答题的主要内容,如果未能解决你的问题,请参考以下文章