`
dsxwjhf
  • 浏览: 72464 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

Spring 常见问答

阅读更多
BeanFactory 和 ApplicationContext 的区别
1. ApplicationContext 是 BeanFactory 的扩展,提供了更丰富的功能,如 AOP ,国际化,事件通知等;
2. 在使用上, BeanFactory 更面向编码, ApplicationContext 更面向配置;
3. BeanFactory 采用懒加载, ApplicationContext 在应用程序启动时加载所有 Bean 。

Spring 注入的几种方式
1. Set 注入
2. 构造器注入
  <bean name="xx" class="yy">
    <constructor-arg index="0" ref="aa"></constructor-arg>
    <constructor-arg index="1" ref="bb"></constructor-arg>
  </bean>
3. 静态工厂方法注入
  public class DaoFactory {
    public static final UserDao getUserDaoImpl() {
      ......
    }
  }
  <bean name="xx" class="yy">
    <property name="userDao" ref="userDao">
  </bean>
  <bean name="userDao" class="DaoFactory" factory-method="getUserDaoImpl" />
4. 实例工厂方法注入
  public class DaoFactory {
    public UserDao getUserDaoImpl() {
      ......
    }
  }
  <bean name="xx" class="yy">
    <property name="userDao" ref="userDao">
  </bean>
  <bean name="daoFactory" class="DaoFactory" />
  <bean name="userDao" factory-bean="daoFactory" factory-method="getUserDaoImpl" />

Spring 事务的隔离级别( Isolation )
1. ISOLATION_DEFAULT: 这是一个 PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别。
2. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
3. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。
4. ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
5. ISOLATION_SERIALIZABLE: 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

什么是脏读,不可重复读,幻读?
脏读:指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据, 那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
幻读:指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

Spring 事务传播行为( Propagation )
PROPAGATION_REQUIRED: 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS: 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY: 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW: 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED: 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER: 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED: 它与 PROPAGATION_REQUIRES_NEW 的区别是, PROPAGATION_REQUIRES_NEW 另起一个事务,将会与它的父事务相互独立,而 Nested 事务和它的父事务是相依的,他的提交是要等和他的父事务一块提交的。也就是说,如果父事务最后回滚,它也要回滚的。

共享锁和排它锁
原文: http://www.cnblogs.com/edwinchen/p/4171866.html
共享锁类似于 Java 里面的读写锁: 允许多个线程同时读,但只允许一个线程写。读的时候写线程被阻塞,写的时候读线程被阻塞。
排它锁类似于普通的 synchronized 或者普通的 Lock ,永远只有一个线程在工作。
如果是在 read committed 或 repeatable read 下,普通的 select 语句并不会进行锁操作,其它 session 可以照常更新或插入操作。所以在这里面就可以发现,如果只是普通 select ,不管在不在事务中, mysql 都不会将 select 加锁,所以根本无法阻止其它事务插入记录。
select ...... for update 会加上排它锁,防止这个问题。

表锁和行锁
原文: http://www.jb51.net/article/50047.htm
页级:引擎 BDB 。
表级:引擎 MyISAM ,理解为锁住整个表,可以同时读,写不行。
行级:引擎 INNODB ,单独的一行记录加锁。
表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写操作。如果你是写锁,则其它进程则读也不允许。
行级,仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。
页级,表级锁速度快,但冲突多;行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。
分享到:
评论

相关推荐

    25个经典的Spring面试问题包含答案

    以上是Spring面试中常见的25个问题及其解答,涵盖了Spring的核心概念、核心模块以及与Spring相关的各种技术和实践。深入理解这些内容,将有助于在面试中脱颖而出,或者在日常开发中提升工作效率。

    Maven创建Spring+SpringMvc+MyBatis包含网上常见问题解答

    这个压缩包"springmvcmybatis"可能包含了上述项目的源代码、配置文件和问题解答,帮助开发者更好地理解和解决问题。通过学习和实践,可以加深对这些技术的理解,提高开发效率。在遇到问题时,不要忘记查阅官方文档、...

    Spring面试问答Top 25

    反转控制权给容器的方式,使得组件间的依赖关系不再硬编码在...以上只是对Spring面试中常见问题的简要解答,深入理解Spring需要更详细的实践和学习。在准备面试时,了解和掌握这些知识点将有助于你成功应对面试挑战。

    Spring教程 spring tutorial

    针对学习者和专业人士在准备认证考试或面试过程中可能遇到的问题,本教程还提供了一系列常见问题及解答。这些问题覆盖了Spring框架的基础概念、核心组件、应用场景等方面,帮助读者巩固所学知识并提升实战能力。 ##...

    Spring mvc、 Spring、 Spring jdbc 整合 demo

    实践中遇到问题时,可以参考Stack Overflow等社区的问答,或者寻求社区的支持。 综上所述,"Spring mvc、Spring、Spring jdbc 整合 demo"是一个实践性的学习项目,它涵盖了Spring框架的关键组件,帮助开发者建立起...

    SpringCloud常见面试题及答案.zip

    这个名为“SpringCloud常见面试题及答案.zip”的压缩包文件,显然包含了与Spring Cloud相关的面试问题和解答,是准备Spring Cloud相关面试或者深入学习该技术的好资料。以下是根据标题、描述以及标签提炼出的一些...

    第5本书 spring3.x

    附录通常是书籍的重要补充,可能包含了额外的理论知识、参考材料、代码示例或者问题解答。PDF文件可能包含了详细的API文档、案例研究,甚至是作者的个人见解和建议。 综上所述,通过阅读《第5本书 spring3.x》,...

    精彩:Spring Security 演讲PPT

    在演讲结束后,演讲嘉宾张明星还预留了时间进行现场问答,解答了观众关于Spring Security的实际应用和技术细节等问题。 ### 总结 通过这次演讲,我们可以看出Spring Security 2.x不仅在功能上强大,而且在灵活性和...

    Spring 编程入门十大问题解答.rar

    本资料“Spring编程入门十大问题解答”旨在帮助初学者解决在学习和使用Spring时可能遇到的常见问题。以下是对这十大问题的详细解析: 1. **什么是Spring框架?** Spring是一个开源的Java平台,主要目标是简化Java...

    最全的Spring考题与答案

    Spring框架是Java开发中不可或缺的一部分,它以其丰富的功能和易用性深受开发者喜爱。以下是针对题目提供的内容,详细解析Spring框架的相关...这些知识点对于理解和使用Spring框架至关重要,同时也是面试中常见的问题。

    spring认证考试完全笔记

    这份Spring认证考试完全笔记不仅包含以上各方面的详细讲解,还可能包含了实际案例分析、常见问题解答和模拟试题,是学习和准备Spring认证考试的必备资料。通过深入学习和实践,考生可以全面提高自己的Spring技能,为...

    mybatis-spring-1.0.1-bundle mybatis spring 官方下载

    提到的 PDF 文档可能是 MyBatis-Spring 的官方用户指南,涵盖了详细的配置示例、使用教程和常见问题解答,对于学习和使用该框架非常有帮助。 综上所述,`mybatis-spring-1.0.1-bundle` 包含了集成 MyBatis 与 ...

    SpringBlade开发手册.pdf

    - **常见问题解答**:汇总了开发者在使用过程中可能遇到的问题及解决办法。 - **项目地址**:给出了SpringBlade及其相关项目的GitHub地址,便于用户获取最新源码和支持。 #### 五、工程结构解析 - **blade-auth**:...

    spring2.0中文手册及使用指南 chm

    而spring.pdf文件可能是Spring的进阶教程或者特定主题的深度探讨,可能包括最佳实践、案例研究或常见问题解答,对于深化对Spring的理解和提升开发技能都非常有帮助。 综上所述,Spring 2.0中文手册及使用指南是Java...

    关于Spring的69个面试问答

    XmlBeanFactory是最常见的实现,它读取XML配置文件来创建和管理对象。 5. **AOP模块**:AOP模块使得开发者可以编写切面,这些切面可以插入到业务逻辑中,比如事务管理、日志记录等。AOP Alliance的使用保证了与其他...

    Spring有关资料 源码

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以其强大的依赖注入(Dependency Injection,DI)和面向...同时,文档则可能包含Spring的使用指南、最佳实践以及常见问题解答,是学习和解决问题的重要参考资料。

    Spring、Mybatis、Springboot常用面试试题及答案.rar

    下面,我们将详细探讨这些框架的核心知识点和常见面试问题。 1. **Spring框架**: - **IoC(Inversion of Control)**:Spring通过IoC容器管理对象的生命周期和依赖关系,降低了组件之间的耦合。 - **AOP(Aspect...

    SpringCloud第二季脑图.rar

    周阳老师的笔记可能涵盖了上述知识点的实践案例、最佳实践和常见问题解答,对于深入理解SpringCloud的使用和设计原则具有很高的价值。通过阅读和研究这个压缩包中的内容,开发者可以系统地学习SpringCloud,并提升...

    spring学习资料

    "SpringGuide.pdf"这个名字暗示着这可能是一份Spring的指南,它可能包含了实战教程、最佳实践和常见问题解答等内容。通过这份指南,学习者可以快速上手Spring,并在实际项目中应用所学知识。 "springLive.pdf"可能...

    spring资源.zip

    这个压缩包中的文档可能涵盖了这些主题的详细介绍,包括基本概念、配置示例、最佳实践以及常见问题解答。对于初学者来说,通过深入阅读和实践,可以逐步建立起对Spring框架的理解和应用能力。同时,提供的答疑服务也...

Global site tag (gtag.js) - Google Analytics