一、Spring基础知识及IOC_选择题
1. 下面关于spring描述错误的是:( )
A Spring支持可插入的事务管理器,使事务划分更轻松,同时无需处理底层的问题。
B Spring事务管理的通用抽象层还包括JTA策略和一个JDBC DataSource。
C 与JTA或EJB CMT一样,Spring的事务支持依赖于Java EE环境。
D Spring事务语义通过AOP应用于 POJO,通过XML或Java SE 5注释进行配置。
参考答案:C
2. 下面选项哪个不是Spring中接口注入的方式?( )
A 接口注入
B 构造子注入
C 设值注入
D 指针注入
参考答案:D
3. 下列关于Spring特性中IoC描述错误的是:()
A IoC就是指程序之间的关系由程序代码直接操控。
B 所谓“控制反转”,是指控制权由应用代码转到外部容器,控制权的转移,
C IoC将控制创建的职责搬进了框架中;并把它从应用代码脱离开来
D 当使用Spring的IoC容器时只需指出组件需要的对象,在运行时Spring的IoC容器会根据XML配置数据提供给它。
参考答案:A
二、Spring基础知识及IOC_简答题
1. 请简述Spring的工作机制?
参考答案:Spring的工作机制可从以下几点来描述:(1)spring
mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
(2)DispatcherServlet查询一个或多个HandlerMapping,到处理请求的Controller。(3)DispatcherServlet请请求提交到目标Controller
(4)Controller进行业务逻辑处理后,会返回一个ModelAndView
(5)Dispathcher查询一个或多个ViewResolver视图解析器,到ModelAndView对象指定的视图对象(6)视图对象负责渲染返回给客户端。
2. 请回答你为什么用Spring的工作机制?
参考答案:Spring能有效的组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了strus或其他为j2ee的API特性的framework,spring致力于解决剩下的问题。Spring能够消除在许多工程中常见的对singleton的过多的使用。这个是一个很大的问题,它降低了系
统的可测试性和面向对象的程度。通过把对接口编程而不是对类编程的代价几乎减少到没有,spring能够促进良好的变成习惯的养成。
3. 请简述Spring是什么?
参考答案:Spring是一个轻型的容器,是J2EE规范的轻量级实现,是企业应用的“一站式”解决方案。其中的核心就是bean工厂,用以构造我们需要的Model,spring是非侵入式的,Spring的应用中的对象不依赖于Spring的特定类。
4. 简述spring的组成?
参考答案:Spring主要由以下六个部分组成① Spring
Core:核心容器,BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能。SpringContext:ApplicationContext,扩展核心容器,提供事件处理、国际化等功能。它提供了一些企业级服务的功能,提供了JNDI,EJB,RMI的支持。②
Spring AOP:提供切面支持。③ Spring DAO:提供事务支持,JDBC,DAO支持。④ Spring ORM:对流行的O/R
Mapping封装或支持。⑤ Spring Web:提供Web应用上下文,对Web开发提供功能上的支持,如请求,表单,异常等。⑥ Spring Web
MVC:全功能MVC框架,作用等同于Struts。
5.简述Spring容器提供了哪些功能?
参考答案:Spring容器提供了对对象的管理,如Spring容器负责生成、组装、销毁组件,,另外Spring容器还提供了对持久化的支持,对事务的支持。另外Spring容器提供了国际化等功能。
6. 在Spring中,bean的注入有几种方式,各是什么?
参考答案:Spring中,Bean的注入有两中方式,分别是Setter注入和构造器注入。
7. 请简述:Spring bean的作用域?
参考答案:在spring2.0之前bean只有2种作用域即:singleton(单例)、non-singleton(也称prototype),
Spring2.0以后,增加了session、request、global
session三种专用于Web应用程序上下文的Bean。因此,默认情况下Spring2.0现在有五种类型的Bean。当然,Spring2.0对Bean的类型的设计进行了重构,并设计出灵活的Bean类型支持,理论上可以有无数多种类型的Bean,用户可以根据自己的需要,增加新的Bean类型,满足实际应用需求。
8. 请叙述设值注入的优点?
参考答案:设置注入的优点:(1)与传统的JavaBean的写法更相似,程序开发人员更容易了解和接受。通过setter方法设定依赖关系显得更加直观、自然。(2)对于有复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建bean实例时,需要同时实例化其依赖的全部实例,因而导致性能的下降,而使用设值注入能够解决这些问题。(3)尤其是某些属性可选的情况下,多参数的构造器更加笨重。
9. 请叙述构造注入的优点?
参考答案:构造注入的优点:(1)可以在构造器中决定依赖关系的注入顺序,优先依赖的
优先注入。(2)对于依赖关系无须变化的bean,构造注入更加有用处。因为没有setter方法,所有的依赖关系全部在构造器内设定,因此,无须担心后续的代码对依赖关系产生破坏。(3)依赖关系只能在构造器中设定,则只有组建的创建者才能改变组建的依赖关系。对组建的调用者而言,组建内部的依赖关系完全透明,更符合高内聚的原则。
10. 说出bean工厂创建bean的三种方式?
参考答案:Bean工厂创建bean的三种方式分别是:
(1)直接构造,需要一个default constructor和相应的setters/getters方法。
要注意的是,我们可以为getter/setter方法传递参数(用preperties标签),也可以为构造函数传递参数
(2)采用静态工厂方法,如:
<bean id="exampleBean"class="examples.ExampleBean2"
factory-method="createInstance"/>
这里要求examples.ExampleBean2类有个静态方法createInstance
(3)非静态工厂方法
<bean id="myFactoryBean" class="..."> </bean>
<bean id="exampleBean"
factory-bean="myFactoryBean" factory-method="createInstance"/>
在这里,必须没有class标签,factory-bean是BeanFactory,factory-method是它的非静态方法,myFactoryBean可以通过容器来管理和配置。
11. 请写出bean的生命周期的方法?
参考答案:(1)通过设置bean的init-method属性指定初始化的方法,他的限制是方法无法接受任何参数,方法可以为static。(2)实现InitializingBean接口的afterPrioertiesSet()方法。(3)销毁对象可以通过disposableBean的destroy的实现。
12. 请简述你对IOC的理解?
参考答案:IOC即Inversion of
Control,就是反转控制,Ioc将控制创建的职责搬进了框架之中,并把它从应用代码中分隔开来,使用Ioc容器则需要指出组件需要什么对象在运行时容器会提供给它,容器是通过查看对象的参数表做到的,也可能根据配置数据如xml。
13. 请回答:IoC最大的好处是什么?
参考答案:IoC最大的好处是降低了对象的耦合性,实现了应用的松散耦合。因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了。
14. 简述IoC的类型?
参考答案:IOC可以分为三种注入类型,分别是构造函数注入、属性注入和接口注入。Spring主要支持构造函数注入和属性注入。
15. Spring中依赖注入与传统编程之间的差别是什么?
参考答案:在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。依赖注入的主要作用是起到解耦合的作用。
三、.AOP_简答题
1. 说出Spring的通知类型有哪些?
参考答案:Spring的通知类型有(1) MethodBeforeAdvice (2) AfterReturningAdvice (3)
MethodInterceptor (4)ThrowsAdvice
springmvc考试选择题2. 谈谈目标对象实现接口与目标对象不实现接口有什么区别?
参考答案:目标对象实现接口与目标对象不实现接口主要有以下几点区别:
(1)如果目标对象实现了接口,默认采用JDK的动态代理机制实现AOP
(2)如果目标对象实现了接口,可以强制spring采用CGLIB实现代理
(3) 如果目标对象没有实现接口,必须采用CGLIB实现代理,spring会自动的在CGLIB和JDK动态代理之间切换
3. 请描述JDK动态代理和CGLI代理的区别?
参考答案:JDK 的动态代理只能对实现了接口的目标类进行代理,而不实现接口的类就不能使用 JDK 的动态代理 CGLIB
是针对类来实现代理,当没有实现接口的类需要代理时就需要通过 CGLIB
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论