SSH框架MVC复习题1Word文件下载.docx
- 文档编号:21023555
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:44
- 大小:50.89KB
SSH框架MVC复习题1Word文件下载.docx
《SSH框架MVC复习题1Word文件下载.docx》由会员分享,可在线阅读,更多相关《SSH框架MVC复习题1Word文件下载.docx(44页珍藏版)》请在冰豆网上搜索。
由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理(load时候之查询一级缓存,不存在则创建代理)。
get()现在一级缓存找,没有就去二级缓存找,没有就去数据库找,没有就返回null;
而对于get方法,hibernate一定要获取到真实的数据,否则返回null。
7.谈谈hibernate的延迟加载和openSessionInView
延迟加载要在session范围内,用到的时候再加载;
opensessioninview是在web层写了一个
filter来打开和关闭session,这样就表示在一次request过程中session一直开着,保证了延迟
加载在session中的这个前提。
8.spring的事务有几种方式?
谈谈spring事务的隔离级别和传播行为。
声明事务和编程事务
隔离级别:
-DEFAULT使用数据库默认的隔离级别
-READ_UNCOMMITTED会出现脏读,不可重复读和幻影读问题
-READ_COMMITTED会出现重复读和幻影读
-REPEATABLE_READ会出现幻影读
-SERIALIZABLE最安全,但是代价最大,性能影响极其严重
和传播行:
-REQUIRED存在事务就融入该事务,不存在就创建事务
-SUPPORTS存在事务就融入事务,不存在则不创建事务
-MANDATORY存在事务则融入该事务,不存在,抛异常
-REQUIRES_NEW总是创建新事务
-NOT_SUPPORTED存在事务则挂起,一直执行非事务操作
-NEVER总是执行非事务,如果当前存在事务则抛异常
-NESTED嵌入式事务
9.Hibernate中的update()和saveOrUpdate()的区别.
摘自hibernate说明文档:
saveOrUpdate()做下面的事:
如果对象已经在本session中持久化了,不做任何事
如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常
如果对象没有持久化标识(identifier)属性,对其调用save()
如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save()
如果对象是附带版本信息的(通过或)并且版本属性的值表明其是一个新实例化的对象,save()它。
否则update()这个对象
10.Spring对多种ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的方法,并结合事务管理。
getHiberanteTemplate里面提供了save,update,delete,find等方法。
简单说一个:
如果配置了声明式事务,当执行getHibernateTemplate的各种方法的时候,事务会
自动被加载
如果没有配置事务,那么以上操作不会真正的被同步到数据库,除非配置了hibernate的
autocommit=true
spring事务分两种形式,声明式事务和编程式事务,spring提供了一个事务的接口
PaltformTractionManager接口,针对不同的事务,spring进行了不同的实现,对hibernate事务
的实现HIbernateTractionManager,对JDBC的JdbcTractionManager,
DataSourceTractionManager以及JdoTractionManager。
接口platformTractionManager提供了三
个方法,获取事务,提交和回滚的方法。
一、Spring框架的优点都有什么?
Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分
Spring是POJO编程,POJO编程使得可持续构建和可测试能力提高
依赖注入和IoC使得JDBC操作简单化
Spring是开源的免费的
Spring使得对象管理集中化合简单化
二、描述一下Spring中实现DI(DependencyInjection)的几种方式
方式一:
接口注入,在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。
方式二:
Type2IoC:
Setterinjection对象创建之后,将被依赖对象通过set方法设置进去
方式三:
Type3IoC:
Constructorinjection对象创建时,被依赖对象以构造方法参数的方式注入
Spring的方式
三、简述你对IoC(InversionofControl)的理解
一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来,最简单的方法是类A中创建一个对于接口B的实现C的实例,但这种方法显然两者的依赖(Dependency)太大了。
而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联。
四、Spring对多种ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的方法。
在context中定义DataSource,创建SessionFactoy,设置参数;
DAO类继承HibernateDaoSupport,实现具体接口,从中获得HibernateTemplate进行具体操作。
在使用中如果遇到OpenSessionInView的问题,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor
五、请介绍一下Spring的事务管理
spring提供了几个关于事务处理的类:
TransactionDefinition//事务属性定义
TranscationStatus//代表了当前的事务,可以提交,回滚。
PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。
一般事务定义步骤:
TransactionDefinitiontd=newTransactionDefinition();
TransactionStatusts=transactionManager.getTransaction(td);
try
{//dosth
transactionMmit(ts);
}
catch(Exceptione){transactionManager.rollback(ts);
spring提供的事务管理可以分为两类:
编程式的和声明式的。
编程式的,比较灵活,但是代码量大,存在重复的代码比较多;
声明式的比编程式的更灵活。
编程式主要使用transactionTemplate。
省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.
voidadd()
{
transactionTemplate.execute(newTransactionCallback(){
pulicObjectdoInTransaction(TransactionStatusts)
{//dosth}
声明式:
使用TransactionProxyFactoryBean:
PROPAGATION_REQUIREDPROPAGATION_REQUIREDPROPAGATION_REQUIRED,readOnly
围绕Poxy的动态代理能够自动的提交和回滚事务
org.springframework.transaction.interceptor.TransactionProxyFactoryBean
PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。
这是最常见的选择。
PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。
如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
六、如何在Spring的applicationContext.xml里面使用JNDI而不是datasource?
可以使用”org.springframework.jndi.JndiObjectFactoryBean”来实现。
示例如下:
<
beanid=”dataSource”>
propertyname=”jndiName”>
value>
java:
comp/env/jdbc/appfuse<
/value>
/property>
/bean>
七、Spring里面如何配置数据库驱动?
使用org.springframework.jdbc.datasource.DriverManagerDataSource”数据源来配置数据库驱动。
propertyname=”driverClassName”>
org.hsqldb.jdbcDriver<
propertyname=”url”>
jdbc:
hsqldb:
db/appfuse<
propertyname=”username”>
sa<
propertyname=”password”>
八、Spring里面applicationContext.xml文件能不能改成其他文件名?
ContextLoaderListener是一个ServletContextListener,它在你的web应用启动的时候初始化。
缺省情况下,它会在WEB-INF/applicationContext.xml文件找Spring的配置。
你可以通过定义一个<
context-param>
元素名字为”contextConfigLocation”来改变Spring配置文件的位置。
listener>
listener-class>
org.springframework.web.context.ContextLoaderListener
param-name>
contextConfigLocation<
/param-name>
param-value>
/WEB-INF/xyz.xml<
/param-value>
/context-param>
/listener-class>
/listener>
九、如何在web应用里面配置spring?
在J2EE的web应用里面配置spring非常简单,最简单的只需要把spring得ContextLoaderListener添加到你的web.xml文件里面就可以了,示例如下:
org.springframework.web.context.ContextLoaderListener<
十、Spring里面如何定义hibernatemapping?
添加hibernatemapping文件到web/WEB-INF目录下的applicationContext.xml文件里面。
propertyname=”mappingResources”>
list>
org/appfuse/model/User.hbm.xml<
/list>
十一、两种依赖注入的类型都是什么?
两种依赖注入的类型分别是setter注入和构造方法注入。
setter注入:
一般情况下所有的javabean,我们都会使用setter方法和getter方法去设置和获取属性的值,示例如下:
publicclassnamebean{
Stringname;
publicvoidsetName(Stringa){
name=a;
}
publicStringgetName(){
returnname;
我们会创建一个bean的实例然后设置属性的值,spring的配置文件如下:
beanid=”bean1″>
propertyname=”name”>
tom<
Spring会调用setName方法来只是name熟悉为tom
构造方法注入:
构造方法注入中,我们使用带参数的构造方法如下:
publicnamebean(Stringa){
我们会在创建bean实例的时候以newnamebean(”tom”)的方式来设置name属性,Spring配置文件如下:
constructor-arg>
MyBeanValue<
/constructor-arg>
使用constructor-arg标签来设置构造方法的参数。
十二、解释一下Dependencyinjection(DI,依赖注入)和IOC(Inversionofcontrol,控制反转)?
参考答案:
依赖注入DI是一个程序设计模式和架构模型,一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:
把一个数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。
控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖
应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。
也可以说,依赖被注入到对象中。
所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。
十三、spring中的BeanFactory与ApplicationContext的作用和区别?
作用:
1.BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。
2.ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:
a.国际化支持
b.资源访问:
Resourcers=ctx.getResource(”classpath:
config.properties”),“file:
c:
/config.properties”
c.事件传递:
通过实现ApplicationContextAware接口
3.常用的获取ApplicationContext的方法:
FileSystemXmlApplicationContext:
从文件系统或者url指定的xml配置文件创建,参数为配置文件名或文件名数组
ClassPathXmlApplicationContext:
从classpath的xml配置文件创建,可以从jar包中读取配置文件
WebApplicationContextUtils:
从web应用的根目录读取配置文件,需要先在web.xml中配置,可以配置监听器或者servlet来实现
servlet>
servlet-name>
context<
/servlet-name>
servlet-class>
org.springframework.web.context.ContextLoaderServlet<
/servlet-class>
load-on-startup>
1<
/load-on-startup>
/servlet>
这两种方式都默认配置文件为web-inf/applicationContext.xml,也可使用context-param指定配置文件
/WEB-INF/myApplicationContext.xml<
十四、如何在web环境中配置applicationContext.xml文件?
或:
org.springframework.web.context.ContextLoaderServlet
通过如下方法取出applicationContext实例:
ApplicationContextac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);
十五、如何配置spring+struts?
在struts-config.xml加入一个插件,通过它加载applicationContext.xml
在struts-config.xml修改action-mapping标记,具体action交给了DelegateActionProxy?
通过DelegateActionProxy进入一spring的环境。
u
在spring的applicationContext.xml加入?
beanname=”/login”class=””singleton=”false”/>
十六、spring+hibernate的配置文件中的主要类有那些?
如何配置?
在myeclipse中先加入spring环境再加入hibernate环境。
如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确?
spring+hibernate的配置文件中的主要类有那些?
dataSource
sessionFactory:
hibernate.cfg.xml
transactionManager
userDao(extendsHibernateDaoSupport)
sessionFactory
facade
proxy
十七、在spring中如何配容器的事务管理,相关的类有那些?
Datasouce
userDao要注入
Proxy代理
Target:
userDao:
代理对象(目标对象)
transactionAttributes(那些方法需要事务处理)
transactionManager(事务处理服务)
十八、在spring中如何配代码的事务管理?
通过如下类实现
TransactionTemplate
JdbcTemplate
十九、在spring中有几种事务管理,分别是什么?
代码管理的事务处理
TransactonTemplate的execute方法中的内部类TransactionCallback中的doInTransaction方法中使用。
publicvoidmake()
TransactionTemplatejtm=newTransactionTemplate(this.getTransactionManager());
jtm.execut
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SSH 框架 MVC 复习题