`
jaesonchen
  • 浏览: 311153 次
  • 来自: ...
社区版块
存档分类
最新评论
阅读更多
Spring笔记
                                      

1.一个bean默认的方式是singleton="true"
2.<ref bean="xxx">和<ref local="xxx">有差别, 后者表示从本地的(同一个)xml文件中来寻找bean
3.abstract和parent的用法。
如果有很多的bean的某些定义都是类似的(比如对于transaction的定义),那么可以给他们的定义作一个模板。
使用parent可以实现这一点。(注意parent并非意味着两个bean之间存在着java的继承关系,只是表示他们的定义之间存在着共同的部分)。
child bean使用parent来继承模板的定义,同样还可以覆盖模板的定义。


<bean id="inheritedTestBean" abstract="true"
    class="org.springframework.beans.TestBean">
    <property name="name"><value>parent</value></property>
    <property name="age"><value>1</value></property>
</bean>


<bean id="inheritsWithDifferentClass" class="org.springframework.beans.DerivedTestBean"
      parent="inheritedTestBean" init-method="initialize">
    <property name="name"><value>override</value></property>
    <!-- age should inherit value of 1 from parent -->
</bean>


很多时候模板并不需要被实例化,为了避免ApplicationContext对它预先的初始化,一般设置abstract="true"


4.ApplicationContext和BeanFactory的区别
生命周期:ApplicationContext会预先初始化所有的singleton的实例


5.transaction
<!-- this example is in verbose form, see note later about concise
     for multiple proxies! -->
<!-- the target bean to wrap transactionally -->
<bean id="petStoreTarget">
  ...
</bean>
<bean id="petStore"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager"><ref bean="transactionManager"/></property>
    <property name="target"><ref bean="petStoreTarget"/></property>
    <property name="transactionAttributes">
        <props>
            <prop key="insert*">PROPAGATION_REQUIRED,-MyCheckedException</prop>
            <prop key="update*">PROPAGATION_REQUIRED</prop>
            <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
        </props>
    </property>
</bean>


6.
     <bean id="UserManager"
  class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="target">
   <ref local="UserManagerTarget" />
  </property>
  <property name="interceptorNames">
   <list>
    <value>debugAdvice</value>
    <value>AfterAdvice</value>
   </list>
  </property>
</bean>
      对interceptorNames进行配置的时候,可以是一个配置一个advisor, 还是是一个advice.
7.advice跟advisor的区别:
advice:它是interceptor, 类型是Around, After, Before, Throw类型中的一种。
        advisor:advisor也是interceptor,从某种意义上,可以理解它也是一种advice,却可以对一个对象的方法进行过滤。符合某些条件的方法该interceptor才生效。
比如RegexpMethodPointcutAdvisor就可以进行正则表达式的配置。get.*表示该interceptor只对getxxx的方法有效。


8.Spring 的AOP 的Advice基本上都是基于class来进行配置的, 例如上面的那个UserManager, 就是对UserManagerTarget对应的那个类来进行配置的。
如何对很多类都进行类似的配置呢?可以使用第三点说到的template来实现。但是这种方法实质上还是对每个单独的类进行配置。
到底怎么做才可以是针对每个对象来配置的呢?


9.Spring的事务管理的大致实现如下:
关键类和方法:
org.springframework.transaction.interceptor.TransactionInterceptor.invoke
org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary
org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction


事务管理只有一个interceptor,那就是TransactionInterceptor。它在对象调用的每个方法之前都会检查一下是否有必要新建一个transaction
createTransactionIfNecessary用来检查是否有必要新建一个transaction。
步骤如下:
寻找transactionAttributes中是否定义有匹配的方法名,匹配包括完全匹配和正则匹配.(优先寻找完全匹配)
1。如果发现定义中有匹配的定义,则
2。从ThreadLocal中找到connectionHoler对象,该对象是在DataSourceUtil.getConnection(DataSource)中获得的。这就是为什么要使用DataSourceUtil.getConnection(DataSource)
的原因。一个connectionHolder对象里边记录了被请求的次数。
3。检查当前的Transaction是否存在?即查找ThreadLocal里边的connectionHolder是否存在,如果存在,表示Transaction已经存在,直接返回。
4。如果当前的Transaction在ThreadLocal中不存在,那么调用DataSourceTransactionManager.doBegin()方法。来新建一个transaction.



10.<property name="transactionAttributes">
   <props>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>
定义的时候只有如果方法执行的时候发生了RuntimeException, 那么Spring会会滚。
如果发生了非RuntimeException,那么Spring还是会提交的。
如果要在Exception的时候也想回滚,那么应该写上<prop key="insert*">PROPAGATION_REQUIRED, -java.lang.Exception</prop>


分享到:
评论

相关推荐

    SPRING 笔记SPRING 笔记

    SPRING 笔记SPRING 笔记SPRING 笔记

    spring笔记

    Spring 笔记 Spring 是 Java 企业版(Java EE)应用程序的框架,提供了结构化的配置文件,实现了控制反转(IoC)和面向切面编程(AOP),支持表现层、业务逻辑层和持久层。Spring 的核心是 IoC 和 AOP,能够与主流...

    spring笔记.pdf

    spring笔记spring基础笔记

    spring 笔记

    spring 初学 笔记 入门提示

    达内,tarena,spring笔记,springPPT课件,达内spring笔记

    Spring笔记可能涵盖了以下内容: 1. **IoC(Inversion of Control)容器**:Spring的核心特性之一,通过反转控制权,让框架负责管理对象的生命周期和装配,开发者只需定义配置,无需手动创建对象。 2. **依赖注入...

    Spring笔记示例源代码

    "Spring笔记示例源代码"这个资源很可能是为了帮助学习者深入理解Spring框架的各种功能和用法而提供的实际代码示例。 1. **Spring IoC**:IoC是Spring的核心特性,它将对象的创建和管理权交给Spring容器,使得开发者...

    spring笔记.md

    spring入门笔记

    尚硅谷Spring笔记

    尚硅谷Spring笔记

    Spring笔记.doc

    【Spring 概念与优势】 Spring 是一个开源的 Java 应用框架,主要设计目标是简化企业级应用的开发。它的核心特性是依赖注入(Dependency Injection,简称 DI)和面向切面编程(Aspect-Oriented Programming,简称 ...

    spring笔记.rar

    除了以上核心内容,Spring笔记中还涵盖了Spring Boot、Spring Cloud等进阶话题,这些都是现代微服务架构中不可或缺的部分。Spring Boot简化了Spring应用的初始搭建和运行过程,而Spring Cloud则为构建分布式系统提供...

    spring笔记.zip

    Spring框架是Java开发中的核心组件,它为应用程序提供...这些笔记将涵盖这些主题的基本概念、使用方法和示例,帮助初学者快速理解和掌握Spring生态系统。通过深入学习和实践,开发者能够构建出高效、可扩展的Java应用。

    Spring笔记.docx

    ### Spring框架概述与核心特性 #### 一、Spring框架简介 Spring框架是一个开源的企业级Java应用框架,由Rod Johnson在2003年发起并创建。它为Java应用程序提供了全面的基础设施支持,使得开发者能够专注于业务逻辑...

    Spring笔记 狂神说

    spring笔记 狂神说

    spring笔记 spring开发教程

    这个"spring笔记"涵盖了上述所有内容,并且非常完整,对于初学者和有经验的开发者都是极好的学习资源。通过深入学习和实践,你将能够充分利用Spring框架的强大功能,提升你的开发效率和应用质量。

    Spring笔记整理.zip

    本笔记将深入讲解Spring的核心概念和使用方法,帮助你快速掌握这一重要的技术。 1. **注解装配**:在Java世界中,注解(Annotation)是一种元数据,它可以提供额外的信息给编译器或运行时环境。在Spring中,注解被...

    狂神spring笔记.pdf

    狂神的spring讲解资料,已汇总成PDF笔记,并加了章节标签方便阅读

    韩顺平spring笔记及PPT资料

    《韩顺平Spring笔记及PPT资料》是一份详尽且深入的学习资源,由知名IT教育专家韩顺平老师精心编制。这份资料旨在帮助学习者掌握Spring框架的核心概念和技术,以便在实际开发中灵活运用。Spring是Java企业级应用开发...

Global site tag (gtag.js) - Google Analytics