第 1 章 Spring 的基本应用
习题
一、填空题
1. 依赖注入的作用就是在使用 Spring 框架创建对象时,动态的将其所依赖的对象注入到
【
】组件中。
2. 在使用 Spring 框架之后,对象的实例不再由调用者来创建,而是由【
】来创建,Spring
容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。
3. 在 Spring 入门程序中只需将 Spring 的 4 个基础包以及【
】的 JAR 包复制到 lib 目录
中,并发布到类路径下即可。
4. 简单来说,BeanFactory 就是一个管理 Bean 的工厂,它主要负责初始化各种 Bean,并调用
它们的【
】方法。
5. Spring 开发所需的 JAR 包分为两个部分:【
】和【
】。
二、判断题
1. Spring 中基于构造方法的依赖注入通过调用带参数的构造方法来实现,每个参数代表着一个
依赖。( )
2. 通 常 在 Java 项 目 中 , 会 采 用 通 过 FileSystemXmlApplicationContext 类 来 实 例 化
ApplicationContext 容器的方式。( )
3. 初学者学习 Spring 框架时,只需将 Spring 的 4 个基础包以及 commons-logging.jar 复制到项
目的 lib 目录,并发布到类路径中即可。( )
4. 依赖注入的作用就是在使用 Spring 框架创建对象时,动态的将其所依赖的对象注入到 Bean
组件中。( )
5. Spring 框架采用的是分层架构,它一系列的功能要素被分成 20 个模块。( )
三、选择题
1. 以下关于 Spring 核心容器相关说法错误的是。( )
A: Spring 框架的所有功能都是通过其核心容器来实现的。
B: 创建 BeanFactory 实例时,需要提供 Spring 所管理容器的详细配置信息,这些信息通常
采用 XML 文件形式来管理。
C: ApplicationContext 不仅包含了 BeanFactory 的所有功能,还添加了对国际化、资源访问、
事件传播等方面的支持。
D: 通 常 在 Java 项 目 中 , 会 采 用 通 过 ClassPathXmlApplicationContext 类 来 实 例 化
ApplicationContext 容器的方式,而在 Web 项目中,ApplicationContext 容器的实例化工作会
交由 Web 服务器来完成。
2. 以下有关 Spring 的四个基础包说法正确的是。( )
A: Spring 的四个基础包,它们分别对应 Spring Web 容器的四个模块。
B: Spring 的 四 个 基 础 包 有 spring-core.RELEASE.jar 、 spring-beans-.RELEASE.jar 、
spring-context-.RELEASE.jar 和 spring-aop-.RELEASE.jar。
C: spring-context-.RELEASE.jar 是所有应用都要用到的 JAR 包,它包含访问配置文件以及进
行 IoC 或者 DI 操作相关的所有类。
D: spring-core.RELEASE.jar 包含 Spring 框架基本的核心工具类,Spring 其它组件都要用到
这个包里的类,是其它组件的基本核心。
3. 以下有关 Spring 框架优点的说法正确的是。( )
A: Spring 具有简单、可测试和松耦合等特点,从这个角度出发,Spring 就是应用于任何 Java
应用的开发中;
B: Spring 提供了对 AOP 的支持,它允许将一些通用任务,如安全、事务、日志等进行集中
式处理,从而提高了程序的复用性
C: Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给 Spring 容
器管理,杜绝了组件之间的耦合性
D: Spring 增加了 Java EE 开发中一些 API 的使用难度
4. Spring 的核心容器是其他模块建立的基础,以下哪个不是该容器的组成模块。( )
A: Beans 模块
B: Core 模块
C: Context 模块
D: AOP 模块
5. 下列选项中,不属于 Spring 框架优点的是。( )
A: 提供强大的、可以有效减少页面代码的标签
B: 声明式事务的支持。
C: 方便解耦、简化开发
D: 方便集成各种优秀框架
四、简答题
1. Spring 依赖注入通常有哪些实现方式,列举并分别进行说明。
答案
一、填空题
1. Bean
2. Spring 容器
3.
4. 生命周期
5. Spring 框架包、第三方依赖包
commons-logging
二、判断题
1. 对
2. 错
3. 对
4. 对
5. 对
三、选择题
1. A
2. D
3. B
4. D
5. A
四、简答题
Spring 的实现方式通常有两种,一种是属性 setter 方法注入,另一种是构造方法注入。属性 setter
方法注入是指 IoC 容器使用 setter 方法来注入被依赖的实例。通过调用无参构造器或无参静态工厂方
法实例化 Bean 后,调用该 Bean 的 setter 方法,即可实现基于 setter 方法的依赖注入。构造方法注入
是指 IoC 容器使用构造方法来注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造
方法来实现,每个参数代表着一个依赖。
第 2 章 Spring 中的 Bean
习题
一、填空题
1. 所谓自动装配,就是将一个 Bean 自动的注入到到其他 Bean 的【
2. @Controller 通常作用在控制层,如 Spring MVC 的【
】中。
】,用于将控制层的类标识为
Spring 中的 Bean,其功能与@Component 相同。
3. 【
】注解用于将数据访问层(DAO 层)的类标识为 Spring 中的 Bean,其功能与
@Component 相同。
4. 对于【
】作用域的 Bean,Spring 只负责创建,当容器创建了 Bean 实例后,Bean 的
实例就交给客户端代码来管理,Spring 容器将不再跟踪其生命周期。
5. 实例工厂方式采用直接创建 Bean 实例的方式,在配置文件中,需要实例化的 Bean 是通过
】属性指向配置的实例工厂,然后使用 factory-method 属性确定使用工厂中的哪
【
个方法。
二、判断题
1. @Component 注解用于描述 Spring 中的 Bean,它是一个泛化的概念,仅仅表示一个组件,
并且可以作用在任何层次,使用时只需将该注解标注在相应方法上即可。( )
2. Spring 提供了 3 种基于 XML 的装配方式:设值注入、构造注入和属性注入。( )
3. 每次客户端请求 singleton 作用域的 Bean 时,Spring 容器都会创建一个新的实例,并且不会
管那些被配置成 singleton 作用域的 Bean 的生命周期。( )
4. Spring 中使用 prototype 定义的 Bean 在 Spring 容器中将只有一个实例,也就是说,无论有多
少个 Bean 引用它,始终将指向同一个对象。( )
5. 对于 prototype 作用域的 Bean,Spring 只负责创建,当容器创建了 Bean 实例后,Bean 的实
例就交给客户端代码来管理,Spring 容器将不再跟踪其生命周期。( )
三、选择题
1. Spring 的元素中的 autowire 属性取值不包括以下。( )
A: default
B: byName
C: byType
D: byId
2. 以下有关 Bean 的装配方式说法正确的是。( )
A: Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的装配、基于注解(Annotation)
的装配和自动装配(其中最常用的是基于 XML 的装配);
B: Spring 提供了 3 种基于 XML 的装配方式:设值注入、构造注入和属性注入;
C: 在 Spring 实例化 Bean 的过程中,Spring 首先会调用 Bean 的默认构造方法来实例化 Bean
对象,然后通过反射的方式调用 setter 方法来注入属性值;
D: 设值注入要求一个 Bean 必须提供一个有参构造方法并且为需要注入的属性提供对应的
setter 方法。
3. 以下哪些不属于 Spring 4.3 版本中 Bean 的作用域。( )
A: application
B: request
C: response
D: globalSession
4. Spring 中定义了一系列的注解,以下有关其常用的注解说明错误的是。( )
A: @Autowired 用于对 Bean 的属性变量、属性的 setter 方法及构造方法进行标注,配合对应
的注解处理器完成 Bean 的自动配置工作,默认按照 Bean 的名称进行装配。
B: @Repository 用于将数据访问层(DAO 层)的类标识为 Spring 中的 Bean。
C: @Service 通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean。
D: @Controller 通常作用在控制层(如 Spring MVC 的 Controller),用于将控制层的类标识
为 Spring 中的 Bean。
5. 下列选项中,不属于 Spring 中实例化 Bean 的方式的是。( )
A: 构造器实例化
C: 实例工厂方式实例化 D: 抽象方法实例化
B: 静态工厂方式实例化
四、简答题
1. 请简述基于 XML 的装配方式中设值注入的要求。
答案
一、填空题
1. Property
2. Controller
3. @Repository
4. prototype
5.
factory-bean
二、判断题
1. 错
2. 错
3. 错
4. 错
5. 对
三、选择题
1. D
2. C
3. C
4. A
5. D
四、简答题
Spring 中基于 XML 的装配方式中设值注入需要满足以下两点要求:
1、Bean 类必须提供一个默认的无参构造方法。
2、Bean 类必须为需要注入的属性提供对应的 setter 方法。
第 3 章 Spring AOP
习题
一、填空题
1. AspectJ 框架中注解【
】用于定义切入点表达式,在使用时还需定义一个包含名字和
任意参数的方法签名来表示切入点名称。
2. 在 Spring 配置文件中,
子元素的 pointcut-ref 属性用于指定一个已经存在的
【
】。
3. 在 Spring 的配置文件中,配置切面使用的是【
4. 在 Spring 中,使用【
5. AOP 术语中【
】元素。
】是创建 AOP 代理的基本方式。
】表示 AOP 框架在特定的切入点执行的增强处理,即在定义好的切入
点处所要执行的程序代码。
二、判断题
1. 如果在同一个连接点有多个通知需要执行,那么在同一切面中,目标方法之前的前置通知
和环绕通知的执行顺序是未知的,目标方法之后的后置通知和环绕通知的执行顺序也是未
知的。( )
2. AspectJ 框架中的注解@After 用于定义最终 final 通知,不管是否异常,该通知都会执行。( )
3. Spring 配置文件中的元素下可以包含多个元素,一个元素
中又可以包含属性和子元素,其子元素包括、和。
( )
4. Spring 中的 AOP 代理默认就是使用 CGLIB 代理的方式来实现的。( )
5. Spring 3.0 以后,Spring AOP 引入了对 AspectJ 的支持,并允许直接使用 AspectJ 进行编程,
而 Spring 自身的 AOP API 也尽量与 AspectJ 保持一致。( )
三、选择题
1. 以下不属于 ProxyFactoryBean 类中的常用可配置属性的是。( )
A: target
B: proxyInterfaces
C: targetClass
D: interceptorNames
2. 以下哪种类型不是 Spring 中的通知类型。( )
A: 异常通知
B: 前置通知
C: 后置通知
D: 最终通知
3. 关于 AspectJ 注解的介绍,说法错误的是。( )
A: @Aspect 用于定义一个切面
B: @Pointcut 用于定义切入点表达式
C: @Before 用于定义前置通知,相当于 BeforeAdvice
D: @After 用于定义后置通知,相当于 AfterReturningAdvice
4. 以下有关 CGLIB 代理相关说法正确的是。( )
A: CGLIB 代理的使用非常简单,但它还有一定的局限性——使用动态代理的对象必须实现
一个或多个接口。
B: 如果要对没有实现接口的类进行代理,那么可以使用 CGLIB 代理。
C: CGLIB 是一个高性能开源的代码生成包,在使用时需要另外导入 CGLIB 所需要的包。
D: Spring 中的 AOP 代理,可以是 JDK 动态代理,也可以是 CGLIB 代理。
5. 以下关于 Spring AOP 的介绍错误的是。( )
A: AOP 的全称是 Aspect-Oriented Programming,即面向切面编程(也称面向方面编程)。
B: AOP 采取横向抽取机制,将分散在各个方法中的重复代码提取出来,这种采用横向抽取
机制的方式,采用 OOP 思想是无法办到的。
C: 虽然 AOP 是一种新的编程思想,采取横向抽取机制,是 OOP 的升级替代品。
D: 目前最流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ。
四、简答题
1. 请对 Spring 的通知类型进行简要说明。
答案
一、填空题
1. @Pointcut
2. 切入点名称
3.
4. ProxyFactoryBean
5. Advice
二、判断题
1. 对
2. 对
3. 对
4. 错
5. 错
三、选择题
1. C
2. D
3. D
4. C
5. C
四、简答题
Spring 中主要包含 5 种通知类型,分别是环绕通知,前置通知,后置通知,异常通知和引介通
知。其中,环绕通知表示在目标方法执行前后实施增强,可以应用于日志、事务管理等功能。前置
通知表示在目标方法执行前实施增强,可以应用于权限管理等功能。后置通知表示在目标方法执行
后实施增强,可以应用于关闭流、上传文件、删除临时文件等功能。异常通知表示在方法抛出异常
后实施增强,可以应用于处理异常记录日志等功能。引介通知表示在目标类中添加一些新的方法和
属性,可以应用于修改老版本程序(增强类)。
第 4 章 Spring 的数据库开发
习题
一、填空题
JdbcTemplate 类中还提供了大量的【
JdbcTemplate 类中的【
1.
2.
3. 【
】方法来处理各种对数据库表的查询操作。
】方法可以完成插入、更新和删除数据的操作。
】就是 Junit4 用来测试的注解,要测试哪个方法,只需要在相应测试的方法上添加
4.
5.
此注解即可。
JDBC 连接数据库时需要 4 个基本属性,包括有【
JdbcTemplate 类的继承关系十分简单。它继承自抽象类【
接口。
】、url、username 和 password。
】,同时实现了 JdbcOperations
二、判断题
1. 在使用 Junit 进行单一测试时,JUnit 视图窗口的进度条为绿色表明运行结果正确;如果进度
条为红色则表示有错误,并且会在窗口中显示所报的错误信息。( )
2. 定义 jdbcTemplate 时,需要将 dataSource 注入到 jdbcTemplate 中。( )
3.
JdbcOperations 接口定义了在 JdbcTemplate 类中可以使用的操作集合,包括添加、修改、查
询和删除等操作。( )
JdbcTemplate 类中还提供了大量的 query()方法来处理各种对数据库表的查询操作。( )
4.
5. 在 JdbcTemplate 类中,提供了大量的更新和查询数据库的方法,我们就是使用的这些方法
来操作数据库的。( )
三、选择题
1. Spring JDBC 模块主要由 4 个包组成,其中不包括。( )
2.
3.
A: core(核心包)
B: dataSource(数据源包)
C: driverClass(数据库驱动包)
D: support(支持包)
JdbcTemplate 的直接父类是。( )
A: JdbcAccessor
B: JdbcOperations
C: JdbcSupper
D: Object
JdbcTemplate 类包含在 Spring JDBC 模块的哪个包中。( )
A: 核心包
B: 数据源包
C: 对象包
D: 支持包
4. 下面关于 update()方法描述错误的是。( )
A: update()方法可以完成插入、更新、删除和查询数据的操作
B: 在 JdbcTemplate 类中,提供了一系列的 update()方法
C: update()方法执行后,会返回受影响的行数
D: update()方法返回的参数是 int 类型
5. 下面描述中,关于 query()方法说法错误的是。( )
A: List query(String sql, RowMapper rowMapper)会执行 String 类型参数提供的 SQL 语句,并
通过 RowMapper 返回一个 List 类型的结果。
PreparedStatementSetter pss, RowMapper rowMapper ) 会 根 据
B: List query(String sql,
String 类型参数提供的 SQL 语句创建 PreparedStatement 对象,通过 RowMapper 将结果返回
到 List 中。
C: List query(String sql, Object[] args, RowMapper rowMapper)会将 args 参数绑定到 SQL 语
句中,并通过 RowMapper 返回一个 Object 类型的单行记录。
D: queryForList(String sql,Object[] args, class elementType)可以返回多行数据的结果,
但必须是返回列表,elementType 参数返回的是 List 元素类型。
四、简答题
1. 请简述如何使用 Junit 对程序中的方法进行测试。
答案
一、填空题
1. query()
2. update()
3. @Test
4. driverClassName
5.
JdbcAccessor
二、判断题
1. 对
2. 对
3. 对
4. 对
5. 对
三、选择题
1. C
2. A
3. A
4. A
5. C
四、简答题
使用 JUnit 对程序中的方法进行测试时的步骤如下:
1、先创建一个普通测试方法,并在方法上添加单元测试的注解@Test;
2、添加@Test 注解后,在注解处会报错,将鼠标移动至@Test 注解处,会弹出错误提示框,单
击提示框中的 Add JUnit4 library to the build path 后,Eclipse 会自动将 JUnit4 的支持包加入到项目中;
3、在执行程序时,只需使用鼠标右键单击测试方法,在弹出的快捷菜单中选择 Run As 中的 JUnit
Test 选项来运行测试方法即可。