Spring面试题(二)

  1. 简述Spring的事务有几种管理方法,写出一种配置方式?

            答: Spring 事务有2种方式: 

            1) 编程式事务: (代码中嵌入)。

            2) 声明式事务:(注解,XML)。 

            注解方式配置事务的方式如下: 

            首先,需要在applicantionContext.xml文件中添加启用的配置:

          <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

             <property name="sessionFactory" ref="sessionFactory">

          </bean>

          <tx: annotation=driven transaction-manager="txManager"/>

             然后使用 @Transactionnal 注解,代码如下:

             @Transactional

            public  class A implements B{

             //@Transactional

              public void insertInfo(Foo foo){}

              public void updateInfo(Foo foo){}

            }

              @Transactional 注解标记可以用在类定义和方法之前,一般使用在方法之前。

2. 请解释事务拦截器的实现原理?

        答: Spring 中的事务管理是使用AOP代理来实现的,对被代理的每个方法进行拦截,在方法执行前启动事务,方法执行完后根据是否有异常和异常的种类进行提交或者回滚。

3. 请说明Spring事务管理中的传播行为和隔离级别?

       

         答:  Spring事务的传播行为如下:

               1)PROPAGATION_REQUIRED   :  支持当前事务,如果当前没有事务,则创建一个事务,这是最常见的选择。 

               2)PROPAGATION_SUPPORTS   :  支持当前事务,如果当前没有事务,就以非事务来执行。

               3)PROPAGATION_MANDATORY  :  支持当前事务,如果没有当前事务,就抛出异常。     

               4)PROPAGATION_REQUIRES_NEW :   新建事务,如果当前存在事务,就把当前事务挂起。

               5)PROPAGATION_NOT_SUPPORTED :  以非事务执行操作,如果当前存在事务,则当前事务挂起。 

               6)PROPAGATION_NEVER :  以非事务方式执行,如果当前存在事务,则抛出异常。

               7)PROPAGATION_NESTED :  如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED 类似的操作。

              Spring 事务隔离级别如下: 

         数据库系统提供了四种事务隔离级别,不同的隔离级别采用不同的锁来实现,在四种事务隔离级别中,Serializable的隔离级别最高,ReadUncommited的隔离级别最低。 大多数数据库默认的隔离级别为ReadCommited, 如SqlServer, 也有少部分数据库的隔离级别为RepeatableRead ,如Mysql。

          1) ReadUncommited: 读未提交数据(会出现脏读,不可重复读和幻读)。

          2) ReadCommited: 读已提交(会出现不可重复读和幻读)。

          3) RepeatableRead: 可重复读(会出现幻读)。

          4) Serializable: 串行化。

         名词解释:

          脏读: 一个事务读到另一个事务未提交的数据。

          不可重复读: 在同一个事务中,多次读取同一数据返回的结果有所不同,就是说后续读取可以读取到另外一个事务更新到的数据。"可重复读" 在同一次事务中多次读取数据时,能够保证所读的数据是一样的,后续读取不能读取到其他事务已提交更新的数据。

          幻读: 一个事务读取到另一个事务已提交的insert数据。

4. Spring整合web应用?

      在web应用程序中,要对Spring的IOC容器(WebApplicationContext)进行初始化,可以通过配置ContextLoadListener监听器实现。

    在web.xml文件中添加如下配置即可完成初始化:

   


  <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:applicationContext.xml</param-value>
  </context-param>  
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

     经过以上配置后 ,即可在servlet或JSP中,直接使用Spring提供的WebApplicationContextUtils工具类可以获取Spring的WebApplicationContext容器,然后可以从该容器中获取你想要的bean了 。

5. 说说你对用SSH框架的理解?

        SSH框架指的是Struts,Spring和Hibernate,其中Spring的作用是控制反转,Stuts作用是流程控制,Hibernate的作用是用于数据持久化。

发布了53 篇原创文章 · 获赞 45 · 访问量 8834

猜你喜欢

转载自blog.csdn.net/qq_33036061/article/details/104504867