【面试】【Spring常见问题总结】【05】

41、声明式事务管理的事务属性有5种:

传播行为:传播行为定义了客户端与彼调用方法之间的事务边界。

隔离级别:隔离级别定义了一个事务可能受其他并发事务影响的程度。

只读:表明事务是否是只读的。

事务超时:指定事务运行的最长时间,超时就回滚。

回滚规则:定义了哪些异常会导致事务回滚而哪些不会。

42、脏读、不可重复读和幻读

脏读:一个事务读取了另一个事务改写但是未提交的数据时。如果改写在稍后被回滚了,那么第一个事务获取的数据就是无效的。

不可重复读:一个事物执行相同的查询两次或者两次以上,但是每次都得到不同的数据。通常是因为另一个并发事务在两次查询期间更新了数据。

幻读:一个事务读取了几行数据,接着另一个并发事务插入了一些数据。在随后的查询中,第一个事务发现多了一些原本不存在的事务。

43、Spring事务的7种传播行为

PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区别

它们非常 类似,都像一个嵌套事务,如果不存在一个活动的事务,都会开启一个新的事务。使用PROPAGATION_REQUIRES_NEW时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。两个事务不是一个真正的嵌套事务。同时它需要JTA 事务管理器的支持。

使用PROPAGATION_NESTED时,外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。

44、Spring事务的5个隔离级别

45、spring注解说明:

采用扫描的方式 配置Spring XML 书写方式

<context:component-scanbase-package="这里是包名"/>

@Service 用于标注业务层组建

@Controller 用于标注控制层组件

@Component 泛指组件,用于不明确的类

@Repository 用户标注数据库访问组件

@PostConstruct 创建对象时执行的方法

@PreDestroy 对象摧毁时执行的方法

@Autowired 直接访问私有属性,直接给私有属性输入值。

@Resource 根据类型注入

46、Spring mvc工作原理:

1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。

2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.

3.DispatcherServlet请求提交到目标Controller

4.Controller进行业务逻辑处理后,会返回一个ModelAndView

5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

6.视图对象负责渲染返回给客户端。

47、Spring的优点有什么?

1.  Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分

2.  Spring是POJO(Plain Ordinary Java Object),POJO编程使得可持续构建和可测试能力提高

3.  依赖注入和IoC使得JDBC操作简单化

4.  Spring是开源的免费的

5.  Spring使得对象管理集中化和简单化

48、spring的事务管理

spring提供了几个关于事务处理的类:

TransactionDefinition //事务属性定义

TranscationStatus //代表了当前的事务,可以提交,回滚。

PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。

49、Spring提供的事务管理

spring提供的事务管理可以分为两类:编程式实现事务,AOP配置声明式解决方案。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。

编程式实现事务,下面是其中的一种实现方式:

TransactionTemplate 的 execute() 方法有一个 TransactionCallback 类型的参数,该接口中定义了一个 doInTransaction() 方法,通常我们以匿名内部类的方式实现 TransactionCallback 接口,并在其doInTransaction() 方法中书写业务逻辑代码。这里可以使用默认的事务提交和回滚规则,这样在业务代码中就不需要显式调用任何事务管理的 API。doInTransaction()
方法有一个TransactionStatus 类型的参数,我们可以在方法的任何位置调用该参数的 setRollbackOnly() 方法将事务标识为回滚的,以执行事务回滚。

根据默认规则,如果在执行回调方法的过程中抛出了未检查异常,或者显式调用了TransacationStatus.setRollbackOnly() 方法,则回滚事务;如果事务执行完成或者抛出了 checked 类型的异常,则提交事务。

TransactionCallback 接口有一个子接口 TransactionCallbackWithoutResult,该接口中定义了一个 doInTransactionWithoutResult() 方法,TransactionCallbackWithoutResult 接口主要用于事务过程中不需要返回值的情况。当然,对于不需要返回值的情况,我们仍然可以使用TransactionCallback 接口,并在方法中返回任意值即可。

声明式事物管理,例子。

<context:component-scanbase-package="com.chou.spring.jdbc"/>
<!-- 配置数据源 -->
<beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <!-- Connection Info -->
    <property name="driverClass"value="${db.driverClass}" />
    <property name="jdbcUrl"value="${db.url}" />
    <property name="user"value="${db.username}" />
    <property name="password"value="${db.password}" />

    <!-- Connection Pooling Info -->
    <propertyname="initialPoolSize" value="1" />
    <property name="minPoolSize"value="1" />
    <property name="maxPoolSize"value="15" />
    <property name="maxIdleTime"value="1800" />
    <property name="maxStatements"value="0" />
</bean>
<beanid="jdbcTemplateDao"class="com.chou.spring.jdbc.dao.JdbcTemplateDao" >
    <property name="dataSource"ref="dataSource" />
</bean>

<!-- JDBC事务管理器 -->
<beanid="jdbctTxManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource"ref="dataSource" />
</bean>
<tx:adviceid="txAdvice" transaction-manager="jdbctTxManager">
    <tx:attributes>
        <tx:methodname="domain*"/>
    </tx:attributes>
</tx:advice>

<aop:configproxy-target-class="true">
    <aop:advisoradvice-ref="txAdvice"
    pointcut="execution(*com.chou.spring.jdbc.service.JdbcTemplateService.*(..))"/>
</aop:config>
时间: 2024-10-13 22:14:34

【面试】【Spring常见问题总结】【05】的相关文章

Struts+Hibernate+Spring常见问题

http://wanglihu.iteye.com/blog/1897718 1.java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor缺少asm-3.3.jar2.java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor缺少asm-commons-3.3.jar3.java.lang.ClassNotFoundException: org.s

【面试】【Spring常见问题总结】【01】

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开发的复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Sprin

【专访】【Spring常见问题汇总】【05】

41.事务属性是声明式事务管理5种: 传播行为:传播行为定义了client与彼调用方法之间的事务边界. 隔离级别:隔离级别定义了一个事务可能受其它并发事务影响的程度. 仅仅读:表明事务是否是仅仅读的. 事务超时:指定事务执行的最长时间,超时就回滚. 回滚规则:定义了哪些异常会导致事务回滚而哪些不会. 42.脏读.不可反复读和幻读 脏读:一个事务读取了还有一个事务改写可是未提交的数据时.假设改写在稍后被回滚了,那么第一个事务获取的数据就是无效的. 不可反复读:一个事物运行同样的查询两次或者两次以上

【面试】【Spring常见问题总结】【09】

81.SimpleJdbcTemplate SimpleJdbcTemplate类也是基于JdbcTemplate类,但利用Java5+的可变參数列表和自己主动装箱和拆箱从而获取更简洁的代码. SimpleJdbcTemplate主要提供两类方法:query及queryForXXX方法.update及batchUpdate方法. 82.集成Spring JDBC及最佳实践 大多数情况下Spring JDBC都是与IOC容器一起使用.通过配置方式使用Spring JDBC.   并且大部分时间都是

【面试】【Spring常见问题总结】【07】

61.Spring IoC容器的依赖有两层含义: Bean依赖容器:也就是说Bean要依赖于容器,这里的依赖是指容器负责创建Bean并管理Bean的生命周期,正是由于由容器来控制创建Bean并注入依赖,也就是控制权被反转了,这也正是IoC名字的由来,此处的有依赖是指Bean和容器之间的依赖关系. 容器注入Bean的依赖资源:容器负责注入Bean的依赖资源,依赖资源可以是Bean.外部文件.常量数据等,在Java中都反映为对象,并且由容器负责组装Bean之间的依赖关系,此处的依赖是指Bean之间的

【面试】【Spring常见问题总结】【08】

71.依赖检查 依赖检查:用于检查Bean定义的属性都注入数据了,不管是自动装配的还是配置方式注入的都能检查,如果没有注入数据将报错,从而提前发现注入错误,只检查具有setter方法的属性.Spring3+也不推荐配置方式依赖检查了,建议采用Java5+ @Required注解方式.在Spring2.5中配置方式的依赖检查有none.simple.object.all四种方式. 1.none:默认方式,表示不检查: 2.objects:检查除基本类型外的依赖对象,配置方式在bean中添加属性为:

【面试】【Spring常见问题总结】【04】

31.Spring切面可以应用5 种类型的通知 l Before--在方法调用之前调用通知. l After--在方法完成之后调用通知,无论方法执行是否成功. l After-returning-- 在生方法成功执行之后调用通知. l After-throwing--在方法抛出异常后调用通知. l Around--通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为. 32.织入的时机 l 编译期--切面在目标类编译时被织入. l 类加载期--切面在目标类加载到JVM时被织入

【面试】【Spring常见问题总结】【06】

51.spring中的applicationContext.xml能不能改为其他名字 ContextLoaderListener是一个ServletContextListener, 它在你的web应用启动的时候初始化.缺省情况下,它会在WEB-INF/applicationContext.xml文件找Spring的配置. 你可以通过定义一个<context-param>元素名字为"contextConfigLocation"来改变Spring配置文件的位置.示例如下: &l

【面试】【Spring常见问题总结】【03】

21.自动检测Bean 为了配置自动检测,需要使用<context:component-scan>元素.默认情况下,<context:component-scan>使用构造型注所标注类.这些特殊的注解如下 @Component--通用构造型注解,标识该类为Spring组件 @Controller--标识将该类定义为SpringMVC controller @Respository--标识将该类定义为数据仓库 @Service--标识将该类定义为服务 22.过滤组件扫描 通过为<