Spring 开源框架介绍

来源:互联网 发布:linux中文目录改成英文 编辑:程序博客网 时间:2024/06/05 12:47

1. Spring   IOC/DI(控制逆转/依赖注入)

当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被 调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。


1.1Setter 注入

以JdbcTemplate(继承JdbcAccessor类)    类为例,属性dataSource可以通过配置文件注入,而dataSource的值可以依据现场环境配置。


1.2 构造函数注入

通过构造函数注入springObj


2.Spring 事物管理

2.1 事物介绍

事务的4个特性       

    原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做。   

    一致性:数据不会因为事务的执行而遭到破坏。    

    隔离性:一个事务的执行,不受其他事务(进程)的干扰。既并发执行的个事务之间互不干扰。    

    持久性:一个事务一旦提交,它对数据库的改变将是永久的。

事务的实现方式 

     1.编码方式

     2.声明式事务管理方式

     基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务

2.2事物配置

<bean id="transactionManager"  class="org.springframework.orm.hibernate3.HibernateTransactionManager"><!-- 依赖注入上面定义的sessionFactory --><property name="sessionFactory" ref="sessionFactory" /></bean>    <!--定义Spring的事务拦截器TransactionInterceptor --><bean id="transactionInterceptor"  class="org.springframework.transaction.interceptor.TransactionInterceptor"><!--  依赖注入上面定义的事务管理器transactionManager --><property name="transactionManager" ref="transactionManager" /><!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 --><property name="transactionAttributes"><props><!-- 以browse、list、load、get及is开头的所有方法采用只读型事务控制类型 --><prop key="browse*">PROPAGATION_REQUIRED,readOnly</prop><prop key="list*">PROPAGATION_REQUIRED,readOnly</prop><prop key="load*">PROPAGATION_REQUIRED,readOnly</prop><prop key="get*">PROPAGATION_REQUIRED,readOnly</prop><prop key="is*">PROPAGATION_REQUIRED,readOnly</prop><!-- 所有方法均进行事务控制,如果当前没有事务,则新建一个事务 --><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean>

Spring中常用事务类型:

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。

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

PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

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

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


<propkey="insert*">PROPAGATION_REQUIRED,-MyCheckedException</prop>

-前缀强制回滚,+前缀指定提交(这允许即使抛出unchecked异常时也可以提交事务)


2.3 事物管理

Spring 事物主要实现PlatformTransactionManager 接口三个方法:

    getTransaction()  获取一个事物

    commit() 提交事物

    rollback()  回滚事物


3 Spring 中的Bean

3.1 Spring中自带的javabean

3.2 Spring 中使用Java bean

Spring 加载JavaBean

WebApplicationContext,这是一个通过Web方式配置ApplicationContext,它适合于Web系统。

ClassPathXMLApplicationContext,可以通过它配置一个XMLApplicationContext,这个时候XML文件应该放到类路径下面。

FileSystemXmlApplicationContext,可以通过它配置XMLApplicationContext,它是将XML文件存放到文件系统目录下面。