《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题.docx

上传人:b****3 文档编号:5453514 上传时间:2022-12-16 格式:DOCX 页数:14 大小:26.86KB
下载 相关 举报
《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题.docx_第1页
第1页 / 共14页
《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题.docx_第2页
第2页 / 共14页
《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题.docx_第3页
第3页 / 共14页
《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题.docx_第4页
第4页 / 共14页
《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题.docx

《《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题.docx》由会员分享,可在线阅读,更多相关《《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题.docx(14页珍藏版)》请在冰豆网上搜索。

《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题.docx

《JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis》课后习题

第一章

【思考题】

1、请简述Spring框架的优点。

2、请简述什么是Spring的IoC和DI。

【答案】

1、Spring框架的优点如下:

(1)非侵入式设计:

Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。

(2)方便解耦、简化开发:

Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器管理,大大的降低了组件之间的耦合性。

(3)支持AOP:

Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而提高了程序的复用性。

(4)支持声明式事务处理:

只需要通过配置就可以完成对事务的管理,而无需手动编程。

(5)方便程序的测试:

Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。

(6)方便集成各种优秀框架:

Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:

Struts、Hibernate、MyBatis、Quartz等)的直接支持。

(7)降低了JavaEEAPI的使用难度:

Spring对JavaEE开发中非常难用的一些API(如:

JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。

2、IoC的全称是InversionofControl,中文名称为控制反转。

控制反转就是指在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。

这样,控制权由应用代码转移到了Spring容器,控制权发生了反转。

DI的全称是DependencyInjection,中文称之为依赖注入。

它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。

从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入。

第二章

【思考题】

1、请简述Bean的生命周期。

2、请简述Bean的几种装配方式的基本用法

【答案】

1、Bean的生命周期的整个执行过程描述如下。

(1)根据配置情况调用Bean构造方法或工厂方法实例化Bean。

(2)利用依赖注入来完成Bean中所有属性值的配置注入。

(3)如果Bean实现了BeanNameAware接口,则Spring调用Bean的setBeanName()方法传入当前Bean的id值。

(4)如果Bean实现了BeanFactoryAware接口,则Spring调用setBeanFactory()方法传入当前工厂实例的引用。

(5)如果Bean实现了ApplicationContextAware接口,则Spring调用setApplicationContext()方法传入当前ApplicationContext实例的引用。

(6)如果BeanPostProcessor和Bean关联,则Spring将调用该接口的预初始化方法postProcessBeforeInitialzation()对Bean进行加工操作,这个非常重要,Spring的AOP就是用它实现的。

(7)如果Bean实现了InitializingBean接口,则Spring将调用afterPropertiesSet()方法。

(8)如果在配置文件中通过init-method属性指定了初始化方法,则调用该初始化方法。

(9)如果有BeanPsostProcessor和Bean关联,则Spring将调用该接口的初始化方法postProcessAfterInitialization()。

此时,Bean已经可以被应用系统使用了。

(10)如果在中指定了该Bean的作用范围为scope="singleton",则将该Bean放入SpringIoC的缓存池中,将触发Spring对该Bean的生命周期管理;如果在中指定了该Bean的作用范围为scope="prototype",则将该Bean交给调用者,调用者管理该Bean的生命周期,Spring不再管理该Bean。

(11)如果Bean实现了DisposableBean接口,则Spring会调用destory()方法将Spring中的Bean销毁;如果在配置文件中通过destory-method属性指定了Bean的销毁方法,则Spring将调用该方法进行销毁。

2、Bean中主要包含三种装配方式,分别为基于XML的装配,基于Annotation的装配和自动装配,这三种装配方式的用法如下:

(1)基于XML的装配:

Spring提供了2种基于XML的装配方式:

设值注入(SetterInjection)和构造注入(ConstructorInjection)。

设置注入中的Bean类必须提供一个默认的无参构造方法,同时必须为需要注入的属性提供对应的setter方法。

使用设值注入时,在Spring配置文件中,需要使用元素的子元素来为每个属性注入值。

使用构造注入时,在配置文件里,需要使用元素的子元素来定义构造方法的参数,可以使用其value属性(或子元素)来设置该参数的值。

(2)基于Annotation的装配:

使用基于Annotation的装配时,首先需要使用@Repository、@Service与@Constroller分别对实现类进行标注,然后用@Autowired或@Resource注解对注入的Bean的属性进行标注,最后在Spring的配置文件中,通过

annotation-config/>来开启注解处理器,或使用

component-scanbase-package="Bean所在的包路径"/>的配置方式即可实现Annotation的装配。

(3)自动装配:

元素中使用autowire属性,并将其属性值设置为byName或者byType即可实现自动装配。

第三章

【思考题】

1、请列举你所知道的AOP专业术语并解释。

2、请列举你所知道的Spring的通知类型并解释。

【答案】

1、AOP的专业术语包括Aspect、Joinpoint、Pointcut、Advice、TargetObject、Proxy和Weaving,对于这些专业术语的解释,具体如下:

(1)Aspect(切面):

在实际应用中,切面通常是指封装的用于横向插入系统功能(如事务、日志等)的类,如图3-1中的Aspect。

该类要被Spring容器识别为切面,需要在配置文件中通过元素指定。

(2)Joinpoint(连接点):

在程序执行过程中的某个阶段点,它实际上是对象的一个操作,例如方法的调用或异常的抛出。

在SpringAOP中,连接点就是指方法的调用。

(3)Pointcut(切入点):

是指切面与程序流程的交叉点,即那些需要处理的连接点,如图3-2所示。

通常在程序中,切入点指的是类或者方法名,如某个通知要应用到所有以add开头的方法中,那么所有满足这一规则的方法都是切入点。

(4)Advice(通知/增强处理):

AOP框架在特定的切入点执行的增强处理,即在定义好的切入点处所要执行的程序代码。

可以将其理解为切面类中的方法,它是切面的具体实现。

(5)TargetObject(目标对象):

是指所有被通知的对象,也被称为被增强对象。

如果AOP框架采用的是动态的AOP实现,那么该对象就是一个被代理对象。

(6)Proxy(代理):

将通知应用到目标对象之后,被动态创建的对象。

(7)Weaving(织入):

将切面代码插入到目标对象上,从而生成代理对象的过程。

2、Spring中的通知按照在目标类方法的连接点位置,可以分为以下5种类型:

(1)org.aopalliance.intercept.MethodInterceptor(环绕通知)

在目标方法执行前后实施增强,可以应用于日志、事务管理等功能。

(2)org.springframework.aop.MethodBeforeAdvice(前置通知)

在目标方法执行前实施增强,可以应用于权限管理等功能。

(3)org.springframework.aop.AfterReturningAdvice(后置通知)

在目标方法执行后实施增强,可以应用于关闭流、上传文件、删除临时文件等功能。

(4)org.springframework.aop.ThrowsAdvice(异常通知)

在方法抛出异常后实施增强,可以应用于处理异常记录日志等功能。

(5)org.springframework.aop.IntroductionInterceptor(引介通知)

在目标类中添加一些新的方法和属性,可以应用于修改老版本程序(增强类)

第四章

【思考题】

1、请简述SpringJDBC是如何进行配置的。

2、请简述SpringJdbcTemplate类中几个常用方法的作用。

【答案】

1、在Spring的配置文件中配置JDBC时,需要定义了三个Bean,分别是dataSource、jdbcTemplate和需要注入类的Bean。

在定义jdbcTemplate时,需要将dataSource注入到jdbcTemplate中,而其他需要使用jdbcTemplate的Bean,也需要将jdbcTemplate注入到该Bean中,这样配置完成后,SpringJDBC就可以使用了。

2、在JdbcTemplate类中,提供了大量的更新和查询数据库的方法,我们就是使用的这些方法来操作数据库的,其常用的方法包括execute()、update()和query()。

其中execute()方法能够完成执行SQL语句的功能,update()方法可以完成插入、更新和删除数据的操作,query()方法可以用来处理各种对数据库表的查询操作。

第五章

【思考题】

1、请简述Spring中事务管理的两种方式。

2、请简述如何使用Annotation方式进行声明式事务管理。

【答案】

1、Spring中的事务管理分为两种方式:

一种是传统的编程式事务管理,另一种是声明式事务管理。

其中,编程式事务管理是通过编写代码实现的事务管理,包括定义事务的开始、正常执行后的事务提交和异常时的事务回滚。

声明式事务管理是通过AOP技术实现的事务管理,其主要思想是将事务管理作为一个“切面”代码单独编写,然后通过AOP技术将事务管理的“切面”代码植入到业务目标类中。

声明式事务管理最大的优点在于开发者无需通过编程的方式来管理事务,只需在配置文件中进行相关的事务规则声明,就可以将事务规则应用到业务逻辑中。

这使得开发人员可以更加专注于核心业务逻辑代码的编写,在一定程度上减少了工作量,提高了开发效率。

2、Spring的声明式事务管理通过Annotation(注解)方式来实现时,开发者只需做两件事情:

1)在Spring容器中注册事务注解驱动,其代码如下:

annotation-driventransaction-manager="transactionManager"/>

2)在需要使用事务的SpringBean类或者Bean类的方法上添加注解@Transactional。

如果将注解添加在Bean类上,则表示事务的设置对整个Bean类的所有方法都起作用;如果将注解添加在Bean类中的某个方法上,则表示事务的设置只对该方法有效。

 

第六章

【思考题】

1、请简述MyBatis框架与Hibernate框架的区别。

2、请简述MyBatis的工作执行流程。

【答案】

1、Hibernate和MyBatis。

这两个框架的主要区别如下:

(1)Hibernate:

是一个全表映射的框架。

通常开发者只需定义好持久化对象到数据库表的映射关系,就可以通过Hibernate提供的方法完成持久层操作。

开发者并不需要熟练的掌握SQL语句的编写,Hibernate会根据制定的存储逻辑,自动的生成对应的SQL,并调用JDBC接口来执行,所以其开发效率会高于MyBatis。

然而Hibernate自身也存在着一些缺点,例如它在多表关联时,对SQL查询的支持较差;更新数据时,需要发送所有字段;不支持存储过程;不能通过优化SQL来优化性能等。

这些问题导致其只适合在场景不太复杂且对性能要求不高的项目中使用。

(2)MyBatis:

是一个半自动映射的框架。

这里所谓的“半自动”是相对于Hibernate全表映射而言的,MyBatis需要手动匹配提供POJO、SQL和映射关系,而Hibernate只需提供POJO和映射关系即可。

与Hibernate相比,虽然使用MyBatis手动编写SQL要比使用Hibernate的工作量大,但MyBatis可以配置动态SQL并优化SQL,可以通过配置决定SQL的映射规则,它还支持存储过程等。

对于一些复杂的和需要优化性能的项目来说,显然使用MyBatis更加合适。

2、MyBatis框架的工作执行流程如下:

(1)读取MyBatis配置文件mybatis-config.xml。

(2)加载映射文件Mapper.xml。

(3)构建会话工厂。

(4)创建SqlSession对象。

(5)使用Executor接口来操作数据库。

(6)使用MappedStatement类型的参数对映射信息进行封装。

(7)输入参数映射。

(8)输出结果映射。

第七章

【思考题】

1、请简述MyBatis核心对象SqlSessionFactory的获取方式。

2、请简述MyBatis映射文件中的主要元素及其作用。

【答案】

1、SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例,通过XML配置文件构建出的SqlSessionFactory实例,其实现代码如下:

//读取配置文件

InputStreaminputStream=Resources.getResourceAsStream("配置文件位置");

//根据配置文件构建SqlSessionFactory

SqlSessionFactorysqlSessionFactory=

newSqlSessionFactoryBuilder().build(inputStream);

2、在映射文件中,元素是映射文件的根元素,其他元素都是它的子元素。

这些子元素及其作用如下所示: