分布式事务 java代码_分布式事务(五)源码详解

系列目录

引子

本节我们将会从上一节的”简单样例“入手:Spring Boot+Atomikos(TM)+Mybatis(ORM)+Mysql(DB),深入源码,看看这个分布式事务是怎么定义、执行的。

先来回忆一下第二节讲的JTA规范,如下图。Atomikos是什么角色?起到什么作用?

4c782e076adab9140eed0fe7a65a5f52.png

角色:

Atomikos根本上是一个事务管理器(TM)也就是JTA模型的核心,上图扇形的中心位置。

作用:

TM调用 【Resource Manager资源管理器】 的XAResource接口来实现事务操作。

TM依赖 【Application Server应用服务器】 的TransactionManager接口当然如果服务器不支持事务管理,自然也就只能使用第三方包,例如Atomikos。

TM依赖 【Application应用程序】 设置事务边界、属性,application调用UserTransaction接口控制事务开始、提交、回滚。

一、bean定义

1.1 JtaTransactionManager

org.springframework.transaction.jta.JtaTransactionManager类是spring提供的分布式事务管理器。

JtaTransactionManager类图如下:

10e65e1e1ad7a3476ff0beaa2cf6a582.png

实现了接口如下:

PlatformTransactionManager :获取事务,提交事务,回滚事务

TransactionFactory:创建事务

InitializingBean:初始化bean

JtaTransactionManager实现了InitializingBean接口的afterPropertiesSet()方法,处于bean生命周期的容器初始化->实例化期->初始化中期,如下图:

118220eb03d7800f44999c8754a6ef8d.png

下面我们看一下JtaTransactionManager在bean初始化中期InitializingBean接口的afterPropertiesSet()做了什么:

1 /**

2 * Initialize the UserTransaction as well as the TransactionManager handle.

3 * @see#initUserTransactionAndTransactionManager()

4 */

5 @Override

6 public void afterPropertiesSet() throwsTransactionSystemException {

7 initUserTransactionAndTransactionManager();

8 checkUserTransactionAndTransactionManager();

9 initTransactionSynchronizationRegistry();

10 }

1.initUserTransactionAndTransactionManager:初始化UserTransaction和TransactionManager接口。主要是如果没有定义的话,可以支持JNDI。

2.checkUserTransactionAndTransactionManager:校验2个接口是否存在。UserTransaction必须定义,TransactionManager可以不定义。

源码如下:

d6468ab19ca1322408763499760a043c.png

对应控制台打印:

o.s.t.jta.JtaTransactionManager : Using JTA UserTransaction: com.atomikos.icatch.jta.UserTransactionImp@614aeccc

o.s.t.jta.JtaTransactionManager : Using JTA TransactionManager: com.atomikos.icatch.jta.UserTransactionManager@5116ac09

3.initTransactionSynchronizationRegistry:初始化事务同步注册,这个不使用JNDI的话没啥用。

上一节分布式事务(三)简单样例中我们配置了JtaTransactionManagerConfig类,如下:

1 packagestudy.config.datasource;

2

3 importcom.atomikos.icatch.jta.UserTransactionImp;

4 importcom.atomikos.icatch.jta.UserTransactionManager;

5 importorg.springframework.context.annotation.Bean;

6 importorg.springframework.context.annotation.Configuration;

7 importorg.springframework.transaction.jta.JtaTransactionManager;

8

9 importjavax.transaction.UserTransaction;

10

11 /**

12 * 事务管理器配置类

13 *

14 * @authordenny

15 */

16 @Configuration

17 public classJtaTransactionManagerConfig {

18

19 @Bean(name = "atomikosTransactionManager")

20 publicJtaTransactionManager regTransactionManager() {

21 UserTransactionManager userTransactionManager = newUserTransactionManager();

22 UserTransaction userTransaction = newUserTransactionImp();

23 return newJtaTransactionManager(userTransaction, userTransactionManager);

24 }

25 }

如上图,我们定义了一个name = "atomikosTransactionManager"的bean,具体类型为JtaTransactionManager。其中构造了2个实现类UserTransactionImp(javax.transaction.UserTransaction接口)、UserTransactionManager(javax.transaction.TransactionManager接口)。并用这2个实现类构造了一个JtaTransactionManager。

1.UserTransaction接口

提供给用户操控事务的:开启,提交,回滚等等。源码如下:

d6bb7db87ea2507f90ac6467e3df1880.png

2 TransactionManager接口

源码如下:

2288abfcb340bc3b569b77363c24031f.png

相比UserTransaction,TransactionManager接口多了接口的挂起、恢复、获取事务3个接口。这3个方法明显是留给系统自己调用的。

1.2 AtomikosDataSourceBean

Spring 为Atomikos定制了一个org.springframework.boot.jta.atomikos.AtomikosDataSourceBean,提供了bean生命周期的一些接口:

BeanNameAware:设置bean名称

InitializingBean:初始化bean

DisposableBean:销毁bean

我们只需要定义这个bean即可轻松使得spring来维护。

e9f5b2a6e9b3ee74a7883add2c602e93.png

com.atomikos.jdbc.AtomikosDataSourceBean类图如下:

0d0a9d055c00d617219cf64a22e47eca.png

其中核心接口:

DataSource接口:getConnection获取数据库连接

ConnectionPoolProperties接口:用于载入连接池的属性

二、源码剖析

2.1 自动配置类

老套路哈,spring boot就这么点花花肠子,既然使用@Transactional这种注解的方式,那么我们就从springboot 容器启动时的自动配置载入(spring boot容器启动详解)开始看。在/META-INF/spring.factories中配置文件中查找,如下图:

5bf59d817837962a9818f89ba26307f7.png

载入2个关于事务的自动配置类:

org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,

org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,

由于本文是分布式事务,故2个配置文件都生效了,我们先看JtaAutoConfiguration

2.2 JtaAutoConfiguration

1 /**

2 * {@linkEnableAutoConfiguration Auto-configuration} for JTA.3 *4 *@authorJosh Long5 *@authorPhillip Webb6 *@since1.2.07 */

8 @ConditionalOnClass(javax.transaction.Transaction.class)9 @ConditionalOnProperty(prefix = "spring.jta", value = "enabled", matchIfMissing = true)10 @AutoConfigureBefore({ XADataSourceAutoConfiguration.class,11 ActiveMQAutoConfiguration.class, ArtemisAutoConfiguration.class,12 HibernateJpaAutoConfiguration.class})13 @Import({ JndiJtaConfiguration.class, BitronixJtaConfiguration.class,14 AtomikosJtaConfiguration.class, NarayanaJtaConfiguration.class})15 @EnableConfigurationProperties(JtaProperties.class)16 public classJtaAutoConfiguration {17

18 }

如上,JtaAutoConfiguration这个类竟然是个空壳,只有一堆注解,挑几个重要的讲一讲:

1.@ConditionalOnClass(javax.transaction.Transaction.class):代表类路径下存在javax.transaction.Transaction.class这个类,那么JtaAutoConfiguration生效。

2.@ConditionalOnProperty(prefix = "spring.jta", value = "enabled", matchIfMissing = true),自动开启spring.jta.enabled=true.

3.@Import({ JndiJtaConfiguration.class, BitronixJtaConfiguration.class, AtomikosJtaConfiguration.class, NarayanaJtaConfiguration.class }),又是spring套路哈,用来导入类。这里导入了4个配置类,可见支持4种第三方事务管理器。AtomikosJtaConfiguration.class自然就是Atomikos了。

AtomikosJtaConfiguration.class这个配置类

1 @Configuration2 @EnableConfigurationProperties({ AtomikosProperties.class, JtaProperties.class})3 @ConditionalOnClass({ JtaTransactionManager.class, UserTransactionManager.class})4 @ConditionalOnMissingBean(PlatformTransactionManager.class)5 classAtomikosJtaConfiguration {6

7 private finalJtaProperties jtaProperties;8

9 private finalTransactionManagerCustomizers transactionManagerCustomizers;10

11 AtomikosJtaConfiguration(JtaProperties jtaProperties,12 ObjectProvidertransactionManagerCustomizers) {13 this.jtaProperties =jtaProperties;14 this.transactionManagerCustomizers =transactionManagerCustomizers15 .getIfAvailable();16 }17

18 @Bean(initMethod = "init", destroyMethod = "shutdownForce")19 @ConditionalOnMissingBean(UserTransactionService.class)20 publicUserTransactionServiceImp userTransactionService(21 AtomikosProperties atomikosProperties) {22 Properties properties = newProperties();23 if (StringUtils.hasText(this.jtaProperties.getTransactionManagerId())) {24 properties.setProperty("com.atomikos.icatch.tm_unique_name",25 this.jtaProperties.getTransactionManagerId());26 }27 properties.setProperty("com.atomikos.icatch.log_base_dir", getLogBaseDir());28 properties.putAll(atomikosProperties.asProperties());29 return newUserTransactionServiceImp(properties);30 }31

32 privateString getLogBaseDir() {33 if (StringUtils.hasLength(this.jtaProperties.getLogDir())) {34 return this.jtaProperties.getLogDir();35 }36 File home = newApplicationHome().getDir();37 return new File(home, "transaction-logs").getAbsolutePath();38 }39

40 @Bean(initMethod = "init", destroyMethod = "close")41 @ConditionalOnMissingBean42 publicUserTransactionManager atomikosTransactionManager(43 UserTransactionService userTransactionService) throwsException {44 UserTransactionManager manager = newUserTransactionManager();45 manager.setStartupTransactionService(false);46 manager.setForceShutdown(true);47 returnmanager;48 }49

50 @Bean51 @ConditionalOnMissingBean(XADataSourceWrapper.class)52 publicAtomikosXADataSourceWrapper xaDataSourceWrapper() {53 return newAtomikosXADataSourceWrapper();54 }55

56 @Bean57 @ConditionalOnMissingBean58 public staticAtomikosDependsOnBeanFactoryPostProcessor atomikosDependsOnBeanFactoryPostProcessor() {59 return newAtomikosDependsOnBeanFactoryPostProcessor();60 }61

62 @Bean63 publicJtaTransactionManager transactionManager(UserTransaction userTransaction,64 TransactionManager transactionManager) {65 JtaTransactionManager jtaTransactionManager = newJtaTransactionManager(66 userTransaction, transactionManager);67 if (this.transactionManagerCustomizers != null) {68 this.transactionManagerCustomizers.customize(jtaTransactionManager);69 }70 returnjtaTransactionManager;71 }72

73 @Configuration74 @ConditionalOnClass(Message.class)75 static classAtomikosJtaJmsConfiguration {76

77 @Bean78 @ConditionalOnMissingBean(XAConnectionFactoryWrapper.class)79 publicAtomikosXAConnectionFactoryWrapper xaConnectionFactoryWrapper() {80 return newAtomikosXAConnectionFactoryWrapper();81 }82

83 }84

85 }

2.3 TransactionAutoConfiguration

这里和本地事务分析过程一致,就不再重复,飞机票spring事务详解(三)源码详解,一直看到第二节结束.这里只截个图:

353ad4cfff0abcdb99220c16707a3f6f.png

最终源码调用具体事务管理器的PlatformTransactionManager接口的3个方法:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 public interfacePlatformTransactionManager {

2 //获取事务状态

3 TransactionStatus getTransaction(TransactionDefinition definition) throwsTransactionException;

4   //事务提交

5 void commit(TransactionStatus status) throwsTransactionException;

6   //事务回滚

7 void rollback(TransactionStatus status) throwsTransactionException;

8 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

三、核心源码

核心实现类图:

653b766e52e597d063bb23a9fd13c18b.png

如上提所示,PlatformTransactionManager顶级接口定义了最核心的事务管理方法,下面一层是AbstractPlatformTransactionManager抽象类,实现了PlatformTransactionManager接口的方法并定义了一些抽象方法,供子类拓展。最下面一层是2个经典事务管理器:

1.DataSourceTransactionmanager: 即本地单资源事务管理器。

2.JtaTransactionManager:即多资源事务管理器(又叫做分布式事务管理器),其实现了JTA规范,使用XA协议进行两阶段提交。

我们这里自然是JTA分布式环境,我们只需要从JtaTransactionManager这个实现类入手即可。

3.1 getTransaction获取事务

AbstractPlatformTransactionManager实现了getTransaction()方法如下:

1 @Override2 public final TransactionStatus getTransaction(TransactionDefinition definition) throwsTransactionException {3 Object transaction =doGetTransaction();4

5 //Cache debug flag to avoid repeated checks.

6 boolean debugEnabled =logger.isDebugEnabled();7

8 if (definition == null) {9 //Use defaults if no transaction definition given.

10 definition = newDefaultTransactionDefinition();11 }12      //如果当前已经存在事务

13 if(isExistingTransaction(transaction)) {14 //根据不同传播机制不同处理

15 returnhandleExistingTransaction(definition, transaction, debugEnabled);16 }17

18 //超时不能小于默认值

19 if (definition.getTimeout()

23 //当前不存在事务,传播机制=MANDATORY(支持当前事务,没事务报错),报错

24 if (definition.getPropagationBehavior() ==TransactionDefinition.PROPAGATION_MANDATORY) {25 throw newIllegalTransactionStateException(26 "No existing transaction found for transaction marked with propagation 'mandatory'");27 }//当前不存在事务,传播机制=REQUIRED/REQUIRED_NEW/NESTED,这三种情况,需要新开启事务,且加上事务同步

28 else if (definition.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRED ||

29 definition.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRES_NEW ||

30 definition.getPropagationBehavior() ==TransactionDefinition.PROPAGATION_NESTED) {31 SuspendedResourcesHolder suspendedResources = suspend(null);32 if(debugEnabled) {33 logger.debug("Creating new transaction with name [" + definition.getName() + "]: " +definition);34 }35 try {//是否需要新开启同步//开启//开启

36 boolean newSynchronization = (getTransactionSynchronization() !=SYNCHRONIZATION_NEVER);37 DefaultTransactionStatus status =newTransactionStatus(38 definition, transaction, true, newSynchronization, debugEnabled, suspendedResources);39 doBegin(transaction, definition);//开启新事务

40 prepareSynchronization(status, definition);//预备同步

41 returnstatus;42 }43 catch(RuntimeException ex) {44 resume(null, suspendedResources);45 throwex;46 }47 catch(Error err) {48 resume(null, suspendedResources);49 throwerr;50 }51 }52 else{53 //当前不存在事务当前不存在事务,且传播机制=PROPAGATION_SUPPORTS/PROPAGATION_NOT_SUPPORTED/PROPAGATION_NEVER,这三种情况,创建“空”事务:没有实际事务,但可能是同步。警告:定义了隔离级别,但并没有真实的事务初始化,隔离级别被忽略有隔离级别但是并没有定义实际的事务初始化,有隔离级别但是并没有定义实际的事务初始化,

54 if (definition.getIsolationLevel() != TransactionDefinition.ISOLATION_DEFAULT &&logger.isWarnEnabled()) {55 logger.warn("Custom isolation level specified but no actual transaction initiated; " +

56 "isolation level will effectively be ignored: " +definition);57 }58 boolean newSynchronization = (getTransactionSynchronization() ==SYNCHRONIZATION_ALWAYS);59 return prepareTransactionStatus(definition, null, true, newSynchronization, debugEnabled, null);60 }61 }

上图核心步骤就是:

1.doGetTransaction():获取事务

2.doBegin:准备工作

3.1.1 JtaTransactionManager的doGetTransaction()

其实也就是把UserTransaction封装成一个JtaTransactionObject返回。

1 @Override2 protectedObject doGetTransaction() {3 UserTransaction ut =getUserTransaction();4 if (ut == null) {5 throw new CannotCreateTransactionException("No JTA UserTransaction available - " +

6 "programmatic PlatformTransactionManager.getTransaction usage not supported");7 }8 if (!this.cacheUserTransaction) {9 ut =lookupUserTransaction(10 this.userTransactionName != null ? this.userTransactionName : DEFAULT_USER_TRANSACTION_NAME);11 }12 returndoGetJtaTransaction(ut);13 }14

15 /**

16 * Get a JTA transaction object for the given current UserTransaction.17 *

Subclasses can override this to provide a JtaTransactionObject18 * subclass, for example holding some additional JTA handle needed.19 *@paramut the UserTransaction handle to use for the current transaction20 *@returnthe JtaTransactionObject holding the UserTransaction21 */

22 protectedJtaTransactionObject doGetJtaTransaction(UserTransaction ut) {23 return newJtaTransactionObject(ut);24 }

3.1.2 JtaTransactionManager.doBegin

1 @Override2 protected voiddoBegin(Object transaction, TransactionDefinition definition) {3 JtaTransactionObject txObject =(JtaTransactionObject) transaction;4 try{5 doJtaBegin(txObject, definition);6 }7 catch(NotSupportedException ex) {8 //assume nested transaction not supported

9 throw newNestedTransactionNotSupportedException(10 "JTA implementation does not support nested transactions", ex);11 }12 catch(UnsupportedOperationException ex) {13 //assume nested transaction not supported

14 throw newNestedTransactionNotSupportedException(15 "JTA implementation does not support nested transactions", ex);16 }17 catch(SystemException ex) {18 throw new CannotCreateTransactionException("JTA failure on begin", ex);19 }20 }

调用JtaTransactionManager.doJtaBegin:

1 protected voiddoJtaBegin(JtaTransactionObject txObject, TransactionDefinition definition)2 throwsNotSupportedException, SystemException {3

4 applyIsolationLevel(txObject, definition.getIsolationLevel());5 int timeout =determineTimeout(definition);6 applyTimeout(txObject, timeout);7 txObject.getUserTransaction().begin();8 }

UserTransactionImp.begin->TransactionManagerImp.begin

1 public void begin ( int timeout ) throwsNotSupportedException,2 SystemException3 {4 CompositeTransaction ct = null;5 ResumePreviousTransactionSubTxAwareParticipant resumeParticipant = null;6

7 ct =compositeTransactionManager.getCompositeTransaction();8 if ( ct != null && ct.getProperty ( JTA_PROPERTY_NAME ) == null) {9 LOGGER.logWarning ( "JTA: temporarily suspending incompatible transaction: " + ct.getTid() +

10 " (will be resumed after JTA transaction ends)");11 ct =compositeTransactionManager.suspend();12 resumeParticipant = newResumePreviousTransactionSubTxAwareParticipant ( ct );13 }14

15 try{16 ct = compositeTransactionManager.createCompositeTransaction ( ( ( long ) timeout ) * 1000);17 if ( resumeParticipant != null) ct.addSubTxAwareParticipant ( resumeParticipant );18 if ( ct.isRoot () &&getDefaultSerial () )19 ct.getTransactionControl ().setSerial ();20 ct.setProperty ( JTA_PROPERTY_NAME , "true");21 } catch( SysException se ) {22 String msg = "Error in begin()";23 LOGGER.logWarning( msg , se );24 throw newExtendedSystemException ( msg , se25 .getErrors () );26 }27 recreateCompositeTransactionAsJtaTransaction(ct);28 }

createCompositeTransaction创建混合事务

1 public CompositeTransaction createCompositeTransaction ( long timeout ) throwsSysException2 {3 Stack errors = newStack();4 CompositeTransaction ct = null , ret = null;5 // 获取当前线程绑定的事务

6 ct =getCurrentTx ();

// 当前线程不存在事务7 if ( ct == null) {

// 创建组合事务8 ret =service_.createCompositeTransaction ( timeout );9 if(LOGGER.isInfoEnabled()){10 LOGGER.logInfo("createCompositeTransaction ( " + timeout + " ): "

11 + "created new ROOT transaction with id " +ret.getTid ());12 }

// 当前线程存在事务13 } else{14 if(LOGGER.isInfoEnabled()) LOGGER.logInfo("createCompositeTransaction ( " + timeout + " )");

// 创建子事务15 ret =ct.getTransactionControl ().createSubTransaction ();16

17 }18 Thread thread =Thread.currentThread ();

// 绑定当前线程和事务的2个映射map19 setThreadMappings ( ret, thread );20

21 returnret;22 }

如果当前线程不存在事务,创建组合事务。如果当前线程存在事务,创建子事务。

调用TransactionServiceImp的createCompositeTransaction创建混合事务

1 public CompositeTransaction createCompositeTransaction ( long timeout ) throwsSysException2 {3 if ( !initialized_ ) throw new IllegalStateException ( "Not initialized");4

5 if ( maxNumberOfActiveTransactions_ >= 0 &&

6 tidToTransactionMap_.size () >=maxNumberOfActiveTransactions_ ) {7 throw new IllegalStateException ( "Max number of active transactions reached:" +maxNumberOfActiveTransactions_ );8 }9

10 String tid =tidmgr_.get ();11 Stack lineage = newStack ();12 //创建协调者

15 CoordinatorImp cc = createCC ( null, tid, true, false, timeout );

//创建组合事务16 CompositeTransaction ct = createCT ( tid, cc, lineage, false);17 returnct;18 }

3.2 commit 提交事务

事务提交流程图如下:

7adaf23895564c2d69384f7e6283a09d.png

AbstractPlatformTransactionManager的commit源码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 @Override

2 public final void commit(TransactionStatus status) throwsTransactionException {

3 if(status.isCompleted()) {//如果事务已完结,报错无法再次提交

4 throw newIllegalTransactionStateException(

5 "Transaction is already completed - do not call commit or rollback more than once per transaction");

6 }

7

8 DefaultTransactionStatus defStatus =(DefaultTransactionStatus) status;

9 if(defStatus.isLocalRollbackOnly()) {//如果事务明确标记为回滚,

10 if(defStatus.isDebug()) {

11 logger.debug("Transactional code has requested rollback");

12 }

13 processRollback(defStatus);//执行回滚

14 return;

15 }//如果不需要全局回滚时提交 且 全局回滚

16 if (!shouldCommitOnGlobalRollbackOnly() &&defStatus.isGlobalRollbackOnly()) {

17 if(defStatus.isDebug()) {

18 logger.debug("Global transaction is marked as rollback-only but transactional code requested commit");

19 }//执行回滚

20 processRollback(defStatus);

21 //仅在最外层事务边界(新事务)或显式地请求时抛出“未期望的回滚异常”

23 if (status.isNewTransaction() ||isFailEarlyOnGlobalRollbackOnly()) {

24 throw newUnexpectedRollbackException(

25 "Transaction rolled back because it has been marked as rollback-only");

26 }

27 return;

28 }

29      //执行提交事务

30 processCommit(defStatus);

31 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

如上图,各种判断:

1.如果事务明确标记为本地回滚,-》执行回滚

2.如果不需要全局回滚时提交 且 全局回滚-》执行回滚

3.提交事务,核心方法processCommit()

processCommit如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 private void processCommit(DefaultTransactionStatus status) throwsTransactionException {

2 try{

3 boolean beforeCompletionInvoked = false;

4 try{//3个前置操作

5 prepareForCommit(status);

6 triggerBeforeCommit(status);

7 triggerBeforeCompletion(status);

8 beforeCompletionInvoked = true;//3个前置操作已调用

9 boolean globalRollbackOnly = false;//新事务 或 全局回滚失败

10 if (status.isNewTransaction() ||isFailEarlyOnGlobalRollbackOnly()) {

11 globalRollbackOnly =status.isGlobalRollbackOnly();

12 }//1.有保存点,即嵌套事务

13 if(status.hasSavepoint()) {

14 if(status.isDebug()) {

15 logger.debug("Releasing transaction savepoint");

16 }//释放保存点

17 status.releaseHeldSavepoint();

18 }//2.新事务

19 else if(status.isNewTransaction()) {

20 if(status.isDebug()) {

21 logger.debug("Initiating transaction commit");

22 }//调用事务处理器提交事务

23 doCommit(status);

24 }

25 //3.非新事务,且全局回滚失败,但是提交时没有得到异常,抛出异常

27 if(globalRollbackOnly) {

28 throw newUnexpectedRollbackException(

29 "Transaction silently rolled back because it has been marked as rollback-only");

30 }

31 }

32 catch(UnexpectedRollbackException ex) {

33 // 触发完成后事务同步,状态为回滚

34 triggerAfterCompletion(status, TransactionSynchronization.STATUS_ROLLED_BACK);

35 throwex;

36 }//事务异常

37 catch(TransactionException ex) {

38 //提交失败回滚

39 if(isRollbackOnCommitFailure()) {

40 doRollbackOnCommitException(status, ex);

41 }//触发完成后回调,事务同步状态为未知

42 else{

43 triggerAfterCompletion(status, TransactionSynchronization.STATUS_UNKNOWN);

44 }

45 throwex;

46 }//运行时异常

47 catch(RuntimeException ex) {

//如果3个前置步骤未完成,调用前置的最后一步操作

48 if (!beforeCompletionInvoked) {

49 triggerBeforeCompletion(status);

50 }//提交异常回滚

51 doRollbackOnCommitException(status, ex);

52 throwex;

53 }//其它异常

54 catch(Error err) {

//如果3个前置步骤未完成,调用前置的最后一步操作

55 if (!beforeCompletionInvoked) {

56 triggerBeforeCompletion(status);

57 }//提交异常回滚

58 doRollbackOnCommitException(status, err);

59 throwerr;

60 }

61

62 //Trigger afterCommit callbacks, with an exception thrown there

63 //propagated to callers but the transaction still considered as committed.

64 try{

65 triggerAfterCommit(status);

66 }

67 finally{

68 triggerAfterCompletion(status, TransactionSynchronization.STATUS_COMMITTED);

69 }

70

71 }

72

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分布式架构 漫谈分布式架构 初识分布式架构与意义 如何把应用从单机扩展到分布式 大型分布式架构演进过程 分布式架构设计 主流架构模型-SOA架构和微服务架构 领域驱动设计及业务驱动规划 分布式架构的基本理论CAP、BASE以及其应用 什么是分布式架构下的高可用设计 构架高性能的分布式架构 构建分布式架构最重要因素 CDN静态文件访问 分布式存储 分布式搜索引擎 应用发布与监控 应用容灾及机房规划 系统动态扩容 分布式架构策略-分而治之 从简到难,从网络通信探究分布式通信原理 基于消息方式的系统间通信 理解通信协议传输过程中的序列化和反序列化机制 基于框架的RPC通信技术 WebService/ApacheCXF RMI/Spring RMI Hession 传统RPC技术在大型分布式架构下面临的问题 分布式架构下的RPC解决方案 Zookeeper 分布式系统的基石 从0开始搭建3个节点额度zookeeper集群 深入分析Zookeeper在disconf配置中心的应用 基于Zookeeper Watcher 核心机制深入源码分析 Zookeeper集群升级、迁移 基于Zookeeper实现分布式服务器动态上下线感知 深入分析Zookeeper Zab协议及选举机制源码解读 Dubbo 使用Dubbo对单一应用服务化改造 Dubbo管理中心及及监控平台安装部署 Dubbo分布式服务模块划分(领域驱动) 基于Dubbo的分布式系统架构实战 Dubbo负载均衡策略分析 Dubbo服务调试之服务只订阅及服务只注册配置 Dubbo服务接口的设计原则(实战经验) Dubbo设计原理及源码分析 基于Dubbo构建大型分布式电商平台实战雏形 Dubbo容错机制及扩展性分析 分布式解决方案 分布式全局ID生成方案 session跨域共享及企业级单点登录解决方案实战 分布式事务解决方案实战 高并发下的服务降级、限流实战 基于分布式架构下分布式锁的解决方案实战 分布式架构实现分布式定时调度 分布式架构-中间件 分布式消息通信 消息中间件在分布式架构中的应用 ActiveMQ ActiveMQ高可用集群企业及部署方案 ActiveMQ P2P及PUB/SUB模式详解 ActiveMQ消息确认及重发策略 ActiveMQ基于Spring完成分布式消息队列实战 Kafka Kafka基于Zookeeper搭建高可用集群实战 kafka消息处理过程剖析 Java客户端实现Kafka生产者与消费者实例 kafka的副本机制及选举原理剖析 基于kafka实现应用日志实时上报统计分析 RabbitMQ 初步认识RabbitMQ及高可用集群部署 详解RabbitMQ消息分发机制及主题消息分发 RabbitMQ消息路由机制分析 RabbitMQ消息确认机制 Redis redis数据结构分析 Redis主从复制原理及无磁盘复制分析 Redis管道模式详解 Redis缓存与数据库一致性问题解决方案 基于redis实现分布式实战 图解Redis中的AOF和RDB持久化策略的原理 redis读写分离架构实践 redis哨兵架构及数据丢失问题分析 redis Cluster数据分布算法之Hash slot redis使用常见问题及性能优化思路 redis高可用及高并发实战 缓存击穿、缓存雪崩预防策略 Redis批量查询优化 Redis高性能集群之Twemproxy of Redis 数据存储 MongoDB NOSQL简介及MongoDB支持的数据类型分析 MongoDB可视化客户端及JavaApi实践 手写基于MongoDB的ORM框架 MongoDB企业级集解决方案 MongoDB聚合、索引及基本执行命令 MongoDB数据分片、转存及恢复策略 MyCat MySQL主从复制及读写分离实战 MySQL+keepalived实现双主高可用方案实践 MySQL高性能解决方案之分库分表 数据库中间件初始Mycat 基于Mycat实习MySQL数据库读写分离 基于Mycat实战之数据库切分策略剖析 Mycat全局表、Er表、分片预警分析 Nginx 基于OpenResty部署应用层Nginx以及Nginx+lua实战 Nginx反向代理服务器及负载均衡服务器配置实战 利用keepalived+Nginx实战Nginx高可用方案 基于Nginx实现访问控制、连接限制 Nginx动静分离实战 Nginx Location ReWrite 等语法配置及原理分析 Nginx提供https服务 基于Nginx+lua完成访问流量实时上报Kafka的实战 Netty 高性能NIO框架 IO 的基本概念、NIO、AIO、BIO深入分析 NIO的核心设计思想 Netty产生的背景及应用场景分析 基于Netty实现的高性能IM聊天 基于Netty实现Dubbo多协议通信支持 Netty无锁化串行设计及高并发处理机制 手写实现多协议RPC框架
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd "> <!-- 自动扫描 --> <context:component-scan base-package="com.flong.*" /> <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" lazy-init="false"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> 初始化连接大小 <property name="initialSize" value="${jdbc.initialSize}"></property> 连接池最大数量 <property name="maxActive" value="${jdbc.maxActive}"></property> 连接池最大空闲 <property name="maxIdle" value="${jdbc.maxIdle}"></property> 连接池最小空闲 <property name="minIdle" value="${jdbc.minIdle}"></property> 获取连接最大等待时间 <property name="maxWait" value="${jdbc.maxWait}"></property> </bean> --> <bean id="dbPasswordCallback" class="com.flong.utils.DBPasswordCallback"> <description>数据库连接回调密码解密</description> </bean> <bean id="statFilter" class="com.alibaba.druid.filter.stat.StatFilter" lazy-init="true"> <description>状态过滤器</description> <property name="logSlowSql" value="true" /> <property name="mergeSql" value="true" /> </bean> <!-- 操作数据库删除,修改,添加的数据源 --> <bean id="writeDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" init-method="init" lazy-init="true"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${jdbc.initialSize}" /> <!-- 连接池最大数量 --> <property name="maxActive" value="${jdbc.maxActive}" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="${jdbc.minIdle}" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${jdbc.maxWait}" /> <!-- --> <property name="defaultReadOnly" value="true" /> <property name="proxyFilters"> <list> <ref bean="statFilter" /> </list> </property> <property name="filters" value="${druid.filters}" /> <property name="connectionProperties" value="password=${password}" /> <property name="passwordCallback" ref="dbPasswordCallback" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="validationQuery" value="SELECT 'x'" /> <property name="timeBetweenLogStatsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" /> </bean> <!-- 操作数据库读的数据源 --> <bean id="readDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" init-method="init" lazy-init="true"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${jdbc.initialSize}" /> <!-- 连接池最大数量 --> <property name="maxActive" value="${jdbc.maxActive}" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="${jdbc.minIdle}" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${jdbc.maxWait}" /> <!-- --> <property name="defaultReadOnly" value="true" /> <property name="proxyFilters"> <list> <ref bean="statFilter" /> </list> </property> <property name="filters" value="${druid.filters}" /> <property name="connectionProperties" value="password=${password}" /> <property name="passwordCallback" ref="dbPasswordCallback" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="validationQuery" value="SELECT 'x'" /> <property name="timeBetweenLogStatsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" /> </bean> <!--利用AbstractRoutingDataSource实现动态数据源切换 --> <bean id="dataSource" class="com.flong.utils.persistence.DynamicChooseDataSource" lazy-init="true"> <description>数据源</description> <property name="targetDataSources"> <map key-type="java.lang.String" value-type="javax.sql.DataSource"> <!-- write --> <entry key="write" value-ref="writeDataSource" /> <!-- read --> <entry key="read" value-ref="readDataSource" /> </map> </property> <!-- 从org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource这个类里面可以看到 defaultTargetDataSource这个对象,根据自己需求的情况默认的情况给一个默认的数据源. --> <property name="defaultTargetDataSource" ref="writeDataSource" /> <property name="methodType"> <map key-type="java.lang.String"> <!-- read --> <entry key="read" value=",get,select,count,list,query" /> <!-- write --> <entry key="write" value=",add,insert,create,update,delete,remove," /> </map> </property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 添加 mybatis-config配置上去。--> <property name="configLocation" value="classpath:mybatis-config.xml" /> <!-- 扫描com.flong.pojo下面的所有类,减少mybatis的mapping所有实体类的路径(parameterType),直接写一个JavaBean即可 --> <property name="typeAliasesPackage" value="com.flong.pojo"/> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:mapping/*.xml"></property> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.flong.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置事务通知属性 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 定义事务传播属性 --> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="edit*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="new*" propagation="REQUIRED" /> <tx:method name="set*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="change*" propagation="REQUIRED" /> <tx:method name="get*" propagation="REQUIRED" read-only="true" /> <tx:method name="find*" propagation="REQUIRED" read-only="true" /> <tx:method name="load*" propagation="REQUIRED" read-only="true" /> <tx:method name="*" propagation="REQUIRED" read-only="true" /> </tx:attributes> </tx:advice> <!-- 配置事务切面 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* com.flong.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" /> </aop:config> </beans>
spring3.2+strut2+hibernate4 注解方式。<struts> spring.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <description>Spring公共配置文件</description> <!-- 启用spring注解支持 --> <context:annotation-config /> <!-- <bean id="sessionFactory"--> <!-- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">--> <!-- <property name="configLocation"--> <!-- value="classpath:hibernate.cfg.xml">--> <!-- </property>--> <!-- </bean>--> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath*:jdbc.properties</value> </list> </property> </bean> <!-- 数据源配置,主要用于开发测试环境 --> <!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 连接池启动时的初始值 --> <property name="initialSize" value="${jdbc.initialSize}"/> <!-- 连接池的最大值 --> <property name="maxActive" value="${jdbc.maxActive}"/> <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 --> <property name="maxIdle" value="${jdbc.maxIdle}"/> <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 --> <property name="minIdle" value="${jdbc.minIdle}"/> </bean> <!-- 数据源配置,在生产环境使用应用服务器的数据库连接池 --> <!-- <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/store" />--> <!--Hibernate配置--> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><!--此处hibernate 的映射采用的是.xml 配置则应设置为:class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”--> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="default_schema">${jdbc.username}</prop> </props> </property> <property name="annotatedClasses"> <!-- 此处hibernate 的映射采用的是.xml 配置同则应设置name=”mappingResource”--> <list> <value>com.sbz.application.catering.entity.user.UserRegister</value><!-- 此处hibernate 的映射 采用的是.xml 配置同则应设置<value>具体配置文件名(*.hbm.xml)</value>--> </list> </property> </bean> <!-- 事务配置管理 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- JTA环境的事务配置 <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager or WebLogicJtaTransactionManager"/> --> <!-- 使用annotation定义事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- 保证POJO中标注@Required的属性被注入 --> <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" /> <!-- 使用 annotation 自动注册bean,并检查@Controller, @Service, @Repository注解已被注入,也可以分开注释,或者固定某个目录下 --> <context:component-scan base-package="*" /> <!-- <aop:config>--> <!-- execution第一个星号代表任何返回类型,第二个星号代表com.sbz.service下的所有包,第三个星号代表所有方法,括号中的两个点代表任何参数--> <!-- <aop:pointcut id="myPointcut" expression="execution(public * com.sbz.*.service.*.*(..))"/>--> <!-- <aop:advisor advice-ref="myAdvice" pointcut-ref="myPointcut"/>--> <!-- </aop:config>--> <!--AOP代表的意思: // 所有符合pointcut条件的类或方法,都执行myAdvice建议,advice里定义了,所有的save方法,find方法都要执行transactionManager这个切面。 // 并且save方法的事物是必须的,find方法是只读的。 --> </beans> --------------------------------------------------------------------------- struts.xml <!--下述语句是将struts2交给spring管理 --> <constant name="struts.objectFactory" value="spring" /> <!-- 更改struts2请求Action的后缀名,默认为action。若想去掉后缀,设为","即可 --> <constant name="struts.action.extension" value=","/> <!-- 当配置文件修改后,系统自动加载该文件。开发阶段建议打开此功能 --> <constant name="struts.counfiguraction.xml.reload" value="true"/> <!-- 指定浏览器输出的编码格式 --> <constant name="struts.il8n.encoding" value="utf-8"/> <!--将action内容放在package元素下,package元素的name值与extends值可以使用默认值,如下所示 --> <package name="abstract_struts" abstract="true" extends="struts-default" namespace="/"> <interceptors> <interceptor name="authority" class="com.sbz.application.common.LoginIntercepter" /> <interceptor-stack name="loginStack"> <interceptor-ref name="authority" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <!-- <default-interceptor-ref name="loginStack" /> --> <global-results> <!-- 下面定义的结果对所有的Action都有效 --> <result name="exception">/common/exception.jsp</result> <result name="fail">/common/exception.jsp</result> <result name="input">/common/exception.jsp</result> <result name="success">/common/success.jsp</result> <result name="login">/index.jsp</result> </global-results> <global-exception-mappings> <!-- 指Action抛出Exception异常时,转入名为exception的结果。 --> <exception-mapping exception="java.lang.Exception" result="exception"/> </global-exception-mappings> </package> <!-- 包含的配置文件 --> <include file="/resource/struts-user.xml"></include>
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,欢迎下载传播。有问题请在评价中留言,我会及时回复的。 <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/> <!-- JTA事务管理器 --> <bean id="myJtaManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction"> <ref local="jotm"/> </property> </bean> <!-- 数据源A --> <bean id="dataSourceA" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> </bean> </property> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 数据源B --> <bean id="dataSourceB" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="${jdbc2.driver}"/> <property name="url" value="${jdbc2.url}"/> </bean> </property> <property name="user" value="${jdbc2.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 事务切面配置 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* *..servi1ce*..*(..))"/> <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/> </aop:config> <!-- 通知配置 --> <tx:advice id="txAdvice" transaction-manager="myJtaManager"> <tx:attributes> <tx:method name="delete*" rollback-for="Exception"/> <tx:method name="save*" rollback-for="Exception"/> <tx:method name="update*" rollback-for="Exception"/> <tx:method name="*" read-only="true" rollback-for="Exception"/> </tx:attributes> </tx:advice ...... ...... ......
All Classes AbstractAdvisorAutoProxyCreator AbstractApplicationContext AbstractApplicationEventMulticaster AbstractAspectJAdvice AbstractAspectJAdvisorFactory AbstractAspectJAdvisorFactory.AspectJAnnotation AbstractAspectJAdvisorFactory.AspectJAnnotationType AbstractAutoProxyCreator AbstractAutowireCapableBeanFactory AbstractBeanDefinition AbstractBeanDefinitionParser AbstractBeanDefinitionReader AbstractBeanFactory AbstractBeanFactoryBasedTargetSource AbstractBeanFactoryBasedTargetSourceCreator AbstractBindingResult AbstractCachingLabeledEnumResolver AbstractCachingViewResolver AbstractCommandController AbstractCommandController AbstractComponentDefinition AbstractConfigurableMBeanInfoAssembler AbstractController AbstractController AbstractDataBoundFormElementTag AbstractDataFieldMaxValueIncrementer AbstractDataSource AbstractDependencyInjectionSpringContextTests AbstractEnterpriseBean AbstractEntityManagerFactoryBean AbstractExcelView AbstractExpressionPointcut AbstractFactoryBean AbstractFallbackTransactionAttributeSource AbstractFormController AbstractFormController AbstractFormTag AbstractGenericLabeledEnum AbstractGenericPointcutAdvisor AbstractHandlerMapping AbstractHandlerMapping AbstractHtmlElementBodyTag AbstractHtmlElementTag AbstractHtmlInputElementTag AbstractHttpInvokerRequestExecutor AbstractInterceptorDrivenBeanDefinitionDecorator AbstractInterruptibleBatchPreparedStatementSetter AbstractJasperReportsSingleFormatView AbstractJasperReportsView AbstractJExcelView AbstractJmsMessageDrivenBean AbstractJmxAttribute AbstractJndiLocatedBeanDefinitionParser AbstractJpaVendorAdapter AbstractLabeledEnum AbstractLazyCreationTargetSource AbstractLobCreatingPreparedStatementCallback AbstractLobHandler AbstractLobStreamingResultSetExtractor AbstractLobType AbstractLobType AbstractLobTypeHandler AbstractLocaleResolver AbstractMapBasedHandlerMapping AbstractMBeanInfoAssembler AbstractMessageDrivenBean AbstractMessageListenerContainer AbstractMessageListenerContainer.SharedConnectionNotInitializedException AbstractMessageSource AbstractModelAndViewTests AbstractMonitoringInterceptor AbstractMultipartHttpServletRequest AbstractOverridingClassLoader AbstractPathMapHandlerMapping AbstractPdfView AbstractPlatformTransactionManager AbstractPointcutAdvisor AbstractPoolingServerSessionFactory AbstractPoolingTargetSource AbstractPropertyAccessor AbstractPropertyBindingResult AbstractPrototypeBasedTargetSource AbstractReflectiveMBeanInfoAssembler AbstractRefreshableApplicationContext AbstractRefreshablePortletApplicationContext AbstractRefreshableTargetSource AbstractRefreshableWebApplicationContext AbstractRegexpMethodPointcut AbstractRemoteSlsbInvokerInterceptor AbstractRequestAttributes AbstractRequestAttributesScope AbstractRequestLoggingFilter AbstractResource AbstractSequenceMaxValueIncrementer AbstractSessionBean AbstractSessionFactory AbstractSessionFactoryBean AbstractSimpleBeanDefinitionParser AbstractSingleBeanDefinitionParser AbstractSingleSpringContextTests AbstractSingletonProxyFactoryBean AbstractSlsbInvokerInterceptor AbstractSpringContextTests AbstractSqlParameterSource AbstractSqlTypeValue AbstractStatefulSessionBean AbstractStatelessSessionBean AbstractTemplateView AbstractTemplateViewResolver AbstractThemeResolver AbstractTraceInterceptor AbstractTransactionalDataSourceSpringContextTests AbstractTransactionalSpringContextTests AbstractTransactionStatus AbstractUrlBasedView AbstractUrlHandlerMapping AbstractUrlMethodNameResolver AbstractUrlViewController AbstractView AbstractWizardFormController AbstractWizardFormController AbstractXmlApplicationContext AbstractXsltView AcceptHeaderLocaleResolver ActionRequestWrapper ActionServletAwareProcessor ActionSupport AdaptableJobFactory AdviceEntry Advised AdvisedSupport AdvisedSupportListener Advisor AdvisorAdapter AdvisorAdapterRegistrationManager AdvisorAdapterRegistry AdvisorChainFactory AdvisorChainFactoryUtils AdvisorComponentDefinition AdvisorEntry AfterReturningAdvice AfterReturningAdviceAdapter AfterReturningAdviceInterceptor AliasDefinition AnnotationAwareAspectJAutoProxyCreator AnnotationBeanUtils AnnotationBeanWiringInfoResolver AnnotationClassFilter AnnotationDrivenBeanDefinitionParser AnnotationJmxAttributeSource AnnotationMatchingPointcut AnnotationMethodMatcher AnnotationSessionFactoryBean AnnotationTransactionAttributeSource AnnotationUtils AntPathMatcher AopConfigException AopContext AopInvocationException AopNamespaceHandler AopNamespaceUtils AopProxy AopProxyFactory AopProxyUtils AopUtils ApplicationContext ApplicationContextAware ApplicationContextAwareProcessor ApplicationContextException ApplicationEvent ApplicationEventMulticaster ApplicationEventPublisher ApplicationEventPublisherAware ApplicationListener ApplicationObjectSupport ArgPreparedStatementSetter ArgTypePreparedStatementSetter ArgumentConvertingMethodInvoker AspectComponentDefinition AspectEntry AspectInstanceFactory AspectJAdviceParameterNameDiscoverer AspectJAdviceParameterNameDiscoverer.AmbiguousBindingException AspectJAdvisorFactory AspectJAfterAdvice AspectJAfterReturningAdvice AspectJAfterThrowingAdvice AspectJAopUtils AspectJAroundAdvice AspectJAutoProxyBeanDefinitionParser AspectJExpressionPointcut AspectJExpressionPointcutAdvisor AspectJInvocationContextExposingAdvisorAutoProxyCreator AspectJMethodBeforeAdvice AspectJPointcutAdvisor AspectJPrecedenceAwareOrderComparator AspectJPrecedenceInformation AspectJProxyFactory AspectJProxyUtils AspectJWeaverMessageHandler AspectMetadata Assert AssertThrows AttributeAccessor AttributeAccessorSupport Attributes AttributesJmxAttributeSource AttributesTransactionAttributeSource AutodetectCapableMBeanInfoAssembler AutoPopulatingList AutoPopulatingList.ElementFactory AutoPopulatingList.ElementInstantiationException Autowire AutowireCapableBeanFactory AutowireUtils AutowiringRequestProcessor AutowiringTilesRequestProcessor AxisBeanMappingServicePostProcessor BadSqlGrammarException BaseCommandController BaseCommandController BatchPreparedStatementSetter BatchSqlUpdate BeanClassLoaderAware BeanComponentDefinition BeanConfigurerSupport BeanCreationException BeanCreationNotAllowedException BeanCurrentlyInCreationException BeanDefinition BeanDefinitionBuilder BeanDefinitionDecorator BeanDefinitionDocumentReader BeanDefinitionHolder BeanDefinitionParser BeanDefinitionParserDelegate BeanDefinitionParsingException BeanDefinitionReader BeanDefinitionReaderUtils BeanDefinitionRegistry BeanDefinitionStoreException BeanDefinitionValidationException BeanDefinitionValueResolver BeanDefinitionVisitor BeanEntry BeanFactory BeanFactoryAspectInstanceFactory BeanFactoryAspectInstanceFactory BeanFactoryAware BeanFactoryDataSourceLookup BeanFactoryLocator BeanFactoryPostProcessor BeanFactoryReference BeanFactoryRefreshableTargetSource BeanFactoryUtils BeanInitializationException BeanInstantiationException BeanIsAbstractException BeanIsNotAFactoryException BeanMetadataElement BeanNameAutoProxyCreator BeanNameAware BeanNameUrlHandlerMapping BeanNameViewResolver BeanNotOfRequiredTypeException BeanPostProcessor BeanPropertyBindingResult BeanPropertySqlParameterSource BeanReference BeansDtdResolver BeansException BeanUtils BeanWiringInfo BeanWiringInfoResolver BeanWrapper BeanWrapperImpl BeforeAdvice BeforeAdviceAdapter BindErrorsTag BindException BindingErrorProcessor BindingResult BindingResultUtils BindInitializer BindStatus BindTag BindUtils BlobByteArrayType BlobByteArrayType BlobByteArrayTypeHandler BlobSerializableType BlobSerializableType BlobSerializableTypeHandler BlobStringType BlobStringType BooleanComparator BootstrapException BridgeMethodResolver BshScriptFactory BshScriptUtils BshScriptUtils.BshExecutionException BurlapClientInterceptor BurlapProxyFactoryBean BurlapServiceExporter ByteArrayMultipartFileEditor ByteArrayPropertyEditor ByteArrayResource C3P0NativeJdbcExtractor CachedIntrospectionResults CachingDestinationResolver CachingMapDecorator CallableStatementCallback CallableStatementCreator CallableStatementCreatorFactory CallbackPreferringPlatformTransactionManager CancellableFormController CannotAcquireLockException CannotCreateRecordException CannotCreateTransactionException CannotGetCciConnectionException CannotGetJdbcConnectionException CannotLoadBeanClassException CannotSerializeTransactionException CciDaoSupport CciLocalTransactionManager CciOperationNotSupportedException CciOperations CciTemplate Cglib2AopProxy Cglib2AopProxy.SerializableNoOp CglibSubclassingInstantiationStrategy ChainedExceptionListener ChainedPersistenceExceptionTranslator CharacterEditor CharacterEncodingFilter CharArrayPropertyEditor CheckboxTag ChildBeanDefinition ClassArrayEditor ClassEditor ClassFileTransformerAdapter ClassFilter ClassFilters ClassLoaderAnalyzerInterceptor ClassLoaderUtils ClassNameBeanWiringInfoResolver ClassPathResource ClassPathXmlApplicationContext ClassUtils CleanupFailureDataAccessException ClobStringType ClobStringType ClobStringTypeHandler CodebaseAwareObjectInputStream CollectionFactory CollectionUtils ColumnMapRowMapper CommAreaRecord CommonsAttributes CommonsDbcpNativeJdbcExtractor CommonsFileUploadSupport CommonsFileUploadSupport.MultipartParsingResult CommonsHttpInvokerRequestExecutor CommonsLogFactoryBean CommonsLoggingLogSystem CommonsLoggingSessionLog CommonsLoggingSessionLog904 CommonsMultipartFile CommonsMultipartResolver CommonsPathMapHandlerMapping CommonsPoolServerSessionFactory CommonsPoolTargetSource CommonsPortletMultipartResolver CommonsRequestLoggingFilter ComparableComparator ComponentControllerSupport ComponentDefinition ComposablePointcut CompositeTransactionAttributeSource CompoundComparator ConcurrencyFailureException ConcurrencyThrottleInterceptor ConcurrencyThrottleSupport ConcurrentTaskExecutor ConditionalTestCase ConfigBeanDefinitionParser Configurable ConfigurableApplicationContext ConfigurableBeanFactory ConfigurableJasperReportsView ConfigurableListableBeanFactory ConfigurableMimeFileTypeMap ConfigurablePortletApplicationContext ConfigurablePropertyAccessor ConfigurableWebApplicationContext ConnectionCallback ConnectionCallback ConnectionFactoryUtils ConnectionFactoryUtils ConnectionFactoryUtils.ResourceFactory ConnectionHandle ConnectionHolder ConnectionHolder ConnectionProxy ConnectionSpecConnectionFactoryAdapter ConnectorServerFactoryBean ConsoleListener ConstantException Constants ConstructorArgumentEntry ConstructorArgumentValues ConstructorArgumentValues.ValueHolder ConstructorResolver ContextBeanFactoryReference ContextClosedEvent ContextJndiBeanFactoryLocator ContextLoader ContextLoaderListener ContextLoaderPlugIn ContextLoaderServlet ContextRefreshedEvent ContextSingletonBeanFactoryLocator ControlFlow ControlFlowFactory ControlFlowFactory.Jdk13ControlFlow ControlFlowFactory.Jdk14ControlFlow ControlFlowPointcut Controller Controller ControllerClassNameHandlerMapping Conventions CookieGenerator CookieLocaleResolver CookieThemeResolver CosMailSenderImpl CosMultipartHttpServletRequest CosMultipartResolver CronTriggerBean CustomBooleanEditor CustomCollectionEditor CustomDateEditor CustomEditorConfigurer CustomizableTraceInterceptor CustomNumberEditor CustomScopeConfigurer CustomSQLErrorCodesTranslation DaoSupport DataAccessException DataAccessResourceFailureException DataAccessUtils Database DatabaseMetaDataCallback DatabaseStartupValidator DataBinder DataFieldMaxValueIncrementer DataIntegrityViolationException DataRetrievalFailureException DataSourceLookup DataSourceLookupFailureException DataSourceTransactionManager DataSourceUtils DB2SequenceMaxValueIncrementer DeadlockLoserDataAccessException DebugInterceptor DeclareParentsAdvisor DecoratingNavigationHandler DefaultAdvisorAdapterRegistry DefaultAdvisorAutoProxyCreator DefaultAopProxyFactory DefaultBeanDefinitionDocumentReader DefaultBindingErrorProcessor DefaultDocumentLoader DefaultIntroductionAdvisor DefaultJdoDialect DefaultJpaDialect DefaultListableBeanFactory DefaultLobHandler DefaultLocatorFactory DefaultMessageCodesResolver DefaultMessageListenerContainer DefaultMessageListenerContainer102 DefaultMessageSourceResolvable DefaultMultipartActionRequest DefaultMultipartHttpServletRequest DefaultNamespaceHandlerResolver DefaultPersistenceUnitManager DefaultPointcutAdvisor DefaultPropertiesPersister DefaultRemoteInvocationExecutor DefaultRemoteInvocationFactory DefaultRequestToViewNameTranslator DefaultResourceLoader DefaultScopedObject DefaultSingletonBeanRegistry DefaultToStringStyler DefaultTransactionAttribute DefaultTransactionDefinition DefaultTransactionStatus DefaultValueStyler DelegatePerTargetObjectDelegatingIntroductionInterceptor DelegatingActionProxy DelegatingActionUtils DelegatingConnectionFactory DelegatingDataSource DelegatingEntityResolver DelegatingFilterProxy DelegatingIntroductionInterceptor DelegatingJob DelegatingMessageSource DelegatingNavigationHandlerProxy DelegatingPhaseListenerMulticaster DelegatingRequestProcessor DelegatingServletInputStream DelegatingServletOutputStream DelegatingThemeSource DelegatingTilesRequestProcessor DelegatingTimerListener DelegatingTimerTask DelegatingTransactionAttribute DelegatingVariableResolver DelegatingWork DescriptiveResource DestinationResolutionException DestinationResolver DestructionAwareBeanPostProcessor DirectFieldAccessor DirectFieldBindingResult DispatchActionSupport DispatcherPortlet DispatcherServlet DispatcherServletWebRequest DisposableBean DisposableBeanAdapter DisposableSqlTypeValue DocumentLoader DomUtils DriverManagerDataSource DynamicDestinationResolver DynamicIntroductionAdvice DynamicMethodMatcher DynamicMethodMatcherPointcut DynamicMethodMatcherPointcutAdvisor EhCacheFactoryBean EhCacheManagerFactoryBean EisOperation EjbAccessException EmptyReaderEventListener EmptyResultDataAccessException EmptyTargetSource EncodedResource EntityManagerFactoryAccessor EntityManagerFactoryInfo EntityManagerFactoryPlus EntityManagerFactoryPlusOperations EntityManagerFactoryUtils EntityManagerHolder EntityManagerPlus EntityManagerPlusOperations ErrorCoded Errors ErrorsTag EscapeBodyTag EscapedErrors EventPublicationInterceptor ExpectedLookupTemplate ExposeBeanNameAdvisors ExposeInvocationInterceptor ExpressionEvaluationUtils ExpressionPointcut ExtendedEntityManagerCreator FacesContextUtils FactoryBean FactoryBeanNotInitializedException FailFastProblemReporter FatalBeanException FieldError FieldRetrievingFactoryBean FileCopyUtils FileEditor FileSystemResource FileSystemResourceLoader FileSystemXmlApplicationContext FilterDefinitionFactoryBean FixedLocaleResolver FixedThemeResolver FormTag FrameworkPortlet FrameworkServlet FreeMarkerConfig FreeMarkerConfigurationFactory FreeMarkerConfigurationFactoryBean FreeMarkerConfigurer FreeMarkerTemplateUtils FreeMarkerView FreeMarkerViewResolver GeneratedKeyHolder GenericApplicationContext GenericBeanFactoryAccessor GenericCollectionTypeResolver GenericFilterBean GenericPortletBean GenericWebApplicationContext GlobalAdvisorAdapterRegistry GroovyScriptFactory HandlerAdapter HandlerAdapter HandlerExceptionResolver HandlerExceptionResolver HandlerExecutionChain HandlerExecutionChain HandlerInterceptor HandlerInterceptor HandlerInterceptorAdapter HandlerInterceptorAdapter HandlerMapping HandlerMapping HashMapCachingAdvisorChainFactory Hessian1SkeletonInvoker Hessian2SkeletonInvoker HessianClientInterceptor HessianProxyFactoryBean HessianServiceExporter HessianSkeletonInvoker HeuristicCompletionException HibernateAccessor HibernateAccessor HibernateCallback HibernateCallback HibernateDaoSupport HibernateDaoSupport HibernateInterceptor HibernateInterceptor HibernateJdbcException HibernateJdbcException HibernateJpaDialect HibernateJpaVendorAdapter HibernateObjectRetrievalFailureException HibernateObjectRetrievalFailureException HibernateOperations HibernateOperations HibernateOptimisticLockingFailureException HibernateOptimisticLockingFailureException HibernateQueryException HibernateQueryException HibernateSystemException HibernateSystemException HibernateTemplate HibernateTemplate HibernateTransactionManager HibernateTransactionManager HiddenInputTag HierarchicalBeanFactory HierarchicalMessageSource HierarchicalThemeSource HotSwappableTargetSource HsqlMaxValueIncrementer HtmlCharacterEntityDecoder HtmlCharacterEntityReferences HtmlEscapeTag HtmlEscapingAwareTag HtmlUtils HttpInvokerClientConfiguration HttpInvokerClientInterceptor HttpInvokerProxyFactoryBean HttpInvokerRequestExecutor HttpInvokerServiceExporter HttpRequestHandler HttpRequestHandlerAdapter HttpRequestHandlerServlet HttpRequestMethodNotSupportedException HttpServletBean HttpSessionMutexListener HttpSessionRequiredException IdentityNamingStrategy IdTransferringMergeEventListener IllegalStateException IllegalTransactionStateException ImportDefinition IncorrectResultSetColumnCountException IncorrectResultSizeDataAccessException IncorrectUpdateSemanticsDataAccessException InitializingBean InputStreamEditor InputStreamResource InputStreamSource InputTag InstantiationAwareBeanPostProcessor InstantiationAwareBeanPostProcessorAdapter InstantiationModelAwarePointcutAdvisor InstantiationModelAwarePointcutAdvisorImpl InstantiationStrategy InstrumentationLoadTimeWeaver InstrumentationSavingAgent InteractionCallback InterceptorAndDynamicMethodMatcher InterfaceBasedMBeanInfoAssembler InternalPathMethodNameResolver InternalResourceView InternalResourceViewResolver InternetAddressEditor InterruptibleBatchPreparedStatementSetter IntroductionAdvisor IntroductionAwareMethodMatcher IntroductionInfo IntroductionInfoSupport IntroductionInterceptor IntrospectorCleanupListener InvalidClientIDException InvalidDataAccessApiUsageException InvalidDataAccessResourceUsageException InvalidDestinationException InvalidInvocationException InvalidIsolationLevelException InvalidMetadataException InvalidPropertyException InvalidResultSetAccessException InvalidResultSetAccessException InvalidSelectorException InvalidTimeoutException InvertibleComparator InvocationFailureException Isolation JamonPerformanceMonitorInterceptor JasperReportsCsvView JasperReportsHtmlView JasperReportsMultiFormatView JasperReportsPdfView JasperReportsUtils JasperReportsViewResolver JasperReportsXlsView JavaMailSender JavaMailSenderImpl JavaScriptUtils JaxRpcPortClientInterceptor JaxRpcPortProxyFactoryBean JaxRpcServicePostProcessor JBossNativeJdbcExtractor JdbcAccessor JdbcBeanDefinitionReader JdbcDaoSupport JdbcOperations JdbcTemplate JdbcTransactionObjectSupport JdbcUpdateAffectedIncorrectNumberOfRowsException JdbcUtils JdkDynamicAopProxy JdkRegexpMethodPointcut JdkVersion JdoAccessor JdoCallback JdoDaoSupport JdoDialect JdoInterceptor JdoObjectRetrievalFailureException JdoOperations JdoOptimisticLockingFailureException JdoResourceFailureException JdoSystemException JdoTemplate JdoTransactionManager JdoUsageException JeeNamespaceHandler JmsAccessor JmsDestinationAccessor JmsException JmsGatewaySupport JmsInvokerClientInterceptor JmsInvokerProxyFactoryBean JmsInvokerServiceExporter JmsOperations JmsResourceHolder JmsSecurityException JmsTemplate JmsTemplate102 JmsTransactionManager JmsTransactionManager102 JmsUtils JmxAttributeSource JmxException JmxMetadataUtils JmxUtils JndiAccessor JndiCallback JndiDataSourceLookup JndiDestinationResolver JndiLocatorSupport JndiLookupBeanDefinitionParser JndiObjectFactoryBean JndiObjectLocator JndiObjectTargetSource JndiRmiClientInterceptor JndiRmiProxyFactoryBean JndiRmiServiceExporter JndiTemplate JndiTemplateEditor JobDetailAwareTrigger JobDetailBean JotmFactoryBean JpaAccessor JpaCallback JpaDaoSupport JpaDialect JpaInterceptor JpaObjectRetrievalFailureException JpaOperations JpaOptimisticLockingFailureException JpaSystemException JpaTemplate JpaTransactionManager JpaVendorAdapter JRubyScriptFactory JRubyScriptUtils JspAwareRequestContext JstlUtils JstlView JtaAfterCompletionSynchronization JtaLobCreatorSynchronization JtaTransactionManager JtaTransactionObject KeyHolder KeyNamingStrategy LabeledEnum LabeledEnumResolver LabelTag LangNamespaceHandler LastModified LazyConnectionDataSourceProxy LazyInitTargetSource LazyInitTargetSourceCreator LazySingletonMetadataAwareAspectInstanceFactoryDecorator LetterCodedLabeledEnum Lifecycle ListableBeanFactory ListenerExecutionFailedException ListenerSessionManager ListFactoryBean LoadTimeWeaver LobCreator LobCreatorUtils LobHandler LobRetrievalFailureException LocalConnectionFactoryBean LocalContainerEntityManagerFactoryBean LocalDataSourceConnectionProvider LocalDataSourceConnectionProvider LocalDataSourceJobStore LocaleChangeInterceptor LocaleContext LocaleContextHolder LocaleEditor LocalEntityManagerFactoryBean LocaleResolver LocalizedResourceHelper LocalJaxRpcServiceFactory LocalJaxRpcServiceFactoryBean LocalPersistenceManagerFactoryBean LocalSessionFactory LocalSessionFactoryBean LocalSessionFactoryBean LocalSessionFactoryBean LocalSlsbInvokerInterceptor LocalStatelessSessionBeanDefinitionParser LocalStatelessSessionProxyFactoryBean LocalTaskExecutorThreadPool LocalTransactionManagerLookup LocalTransactionManagerLookup LocalVariableTableParameterNameDiscoverer Location Log4jConfigListener Log4jConfigServlet Log4jConfigurer Log4jNestedDiagnosticContextFilter Log4jWebConfigurer LookupDispatchActionSupport LookupOverride MailAuthenticationException MailException MailMessage MailParseException MailPreparationException MailSender MailSendException ManagedAttribute ManagedAttribute ManagedList ManagedMap ManagedNotification ManagedNotification ManagedNotifications ManagedOperation ManagedOperation ManagedOperationParameter ManagedOperationParameter ManagedOperationParameters ManagedProperties ManagedResource ManagedResource ManagedSet MapBindingResult MapDataSourceLookup MapFactoryBean MappingCommAreaOperation MappingDispatchActionSupport MappingRecordOperation MappingSqlQuery MappingSqlQueryWithParameters MapSqlParameterSource MatchAlwaysTransactionAttributeSource MaxUploadSizeExceededException MBeanClientInterceptor MBeanExporter MBeanExporterListener MBeanExportException MBeanExportOperations MBeanInfoAssembler MBeanInfoRetrievalException MBeanProxyFactoryBean MBeanRegistrationSupport MBeanServerConnectionFactoryBean MBeanServerFactoryBean MBeanServerNotFoundException Mergeable MessageCodesResolver MessageConversionException MessageConverter MessageCreator MessageEOFException MessageFormatException MessageListenerAdapter MessageListenerAdapter102 MessageNotReadableException MessageNotWriteableException MessagePostProcessor MessageSource MessageSourceAccessor MessageSourceAware MessageSourceResolvable MessageSourceResourceBundle MessageTag MetaDataAccessException MetadataAwareAspectInstanceFactory MetadataMBeanInfoAssembler MetadataNamingStrategy MethodBeforeAdvice MethodBeforeAdviceInterceptor MethodExclusionMBeanInfoAssembler MethodInvocationException MethodInvocationProceedingJoinPoint MethodInvoker MethodInvokingFactoryBean MethodInvokingJobDetailFactoryBean MethodInvokingJobDetailFactoryBean.MethodInvokingJob MethodInvokingJobDetailFactoryBean.StatefulMethodInvokingJob MethodInvokingRunnable MethodInvokingTimerTaskFactoryBean MethodLocatingFactoryBean MethodMapTransactionAttributeSource MethodMatcher MethodMatchers MethodNameBasedMBeanInfoAssembler MethodNameResolver MethodOverride MethodOverrides MethodParameter MethodReplacer MimeMailMessage MimeMessageHelper MimeMessagePreparator MockActionRequest MockActionResponse MockExpressionEvaluator MockFilterConfig MockHttpServletRequest MockHttpServletResponse MockHttpSession MockMultipartActionRequest MockMultipartFile MockMultipartHttpServletRequest MockPageContext MockPortalContext MockPortletConfig MockPortletContext MockPortletPreferences MockPortletRequest MockPortletRequestDispatcher MockPortletResponse MockPortletSession MockPortletURL MockRenderRequest MockRenderResponse MockRequestDispatcher MockServletConfig MockServletContext ModelAndView ModelAndView ModelAndViewDefiningException ModelAndViewDefiningException ModelMap ModelMBeanNotificationPublisher MultiActionController MultipartActionRequest MultipartException MultipartFile MultipartFilter MultipartHttpServletRequest MultipartResolver MutablePersistenceUnitInfo MutablePropertyValues MutableSortDefinition MySQLMaxValueIncrementer NamedBean NamedParameterJdbcDaoSupport NamedParameterJdbcOperations NamedParameterJdbcTemplate NamedParameterUtils NameMatchMethodPointcut NameMatchMethodPointcutAdvisor NameMatchTransactionAttributeSource NamespaceHandler NamespaceHandlerResolver NamespaceHandlerSupport NativeJdbcExtractor NativeJdbcExtractorAdapter NestedCheckedException NestedExceptionUtils NestedIOException NestedPathTag NestedRuntimeException NestedServletException NestedTransactionNotSupportedException NoRollbackRuleAttribute NoSuchBeanDefinitionException NoSuchMessageException NoSuchRequestHandlingMethodException NotAnAtAspectException NotificationListenerBean NotificationPublisher NotificationPublisherAware NoTransactionException NotReadablePropertyException NotSupportedRecordFactory NotWritablePropertyException NullSafeComparator NullSourceExtractor NullValueInNestedPathException NumberUtils ObjectError ObjectFactory ObjectFactoryCreatingFactoryBean ObjectNameManager ObjectNamingStrategy ObjectOptimisticLockingFailureException ObjectRetrievalFailureException ObjectUtils OC4JClassPreprocessorAdapter OC4JLoadTimeWeaver OncePerRequestFilter OpenEntityManagerInViewFilter OpenEntityManagerInViewInterceptor OpenPersistenceManagerInViewFilter OpenPersistenceManagerInViewInterceptor OpenSessionInViewFilter OpenSessionInViewFilter OpenSessionInViewInterceptor OpenSessionInViewInterceptor OptimisticLockingFailureException OptionsTag OptionTag OptionWriter OracleLobHandler OracleLobHandler.LobCallback OracleSequenceMaxValueIncrementer Order OrderComparator Ordered PagedListHolder PagedListSourceProvider ParameterDisposer ParameterHandlerMapping ParameterizableViewController ParameterizableViewController ParameterizedRowMapper ParameterMapper ParameterMappingInterceptor ParameterMethodNameResolver ParameterNameDiscoverer ParsedSql ParserContext ParseState ParseState.Entry PassThroughSourceExtractor PasswordInputTag PathMap PathMatcher PathMatchingResourcePatternResolver PatternMatchUtils PerformanceMonitorInterceptor PerformanceMonitorListener Perl5RegexpMethodPointcut PermissionDeniedDataAccessException PersistenceAnnotationBeanPostProcessor PersistenceExceptionTranslationAdvisor PersistenceExceptionTranslationInterceptor PersistenceExceptionTranslationPostProcessor PersistenceExceptionTranslator PersistenceManagerFactoryUtils PersistenceManagerHolder PersistenceUnitManager PersistenceUnitPostProcessor PersistenceUnitReader PessimisticLockingFailureException PlatformTransactionManager PluggableSchemaResolver Pointcut PointcutAdvisor PointcutComponentDefinition PointcutEntry Pointcuts PoolingConfig PortletApplicationContextUtils PortletApplicationObjectSupport PortletConfigAware PortletContentGenerator PortletContextAware PortletContextAwareProcessor PortletContextResource PortletContextResourceLoader PortletContextResourcePatternResolver PortletModeHandlerMapping PortletModeNameViewController PortletModeParameterHandlerMapping PortletMultipartResolver PortletRequestAttributes PortletRequestBindingException PortletRequestDataBinder PortletRequestHandledEvent PortletRequestParameterPropertyValues PortletRequestUtils PortletRequestWrapper PortletSessionRequiredException PortletUtils PortletWebRequest PortletWrappingController PostgreSQLSequenceMaxValueIncrementer PreferencesPlaceholderConfigurer PreparedStatementCallback PreparedStatementCreator PreparedStatementCreatorFactory PreparedStatementSetter PrioritizedParameterNameDiscoverer Problem ProblemReporter ProducerCallback Propagation PropertiesBeanDefinitionReader PropertiesEditor PropertiesFactoryBean PropertiesLoaderSupport PropertiesLoaderUtils PropertiesMethodNameResolver PropertiesPersister PropertyAccessException PropertyAccessor PropertyAccessorUtils PropertyBatchUpdateException PropertyComparator PropertyEditorRegistrar PropertyEditorRegistry PropertyEditorRegistrySupport PropertyEntry PropertyMatches PropertyOverrideConfigurer PropertyPathFactoryBean PropertyPlaceholderConfigurer PropertyResourceConfigurer PropertyValue PropertyValues PropertyValuesEditor PrototypeAspectInstanceFactory PrototypeTargetSource ProxyConfig ProxyFactory ProxyFactoryBean ProxyMethodInvocation QuartzJobBean QuickTargetSourceCreator RadioButtonTag RdbmsOperation ReaderContext ReaderEventListener RecordCreator RecordExtractor RecordTypeNotSupportedException RedirectView ReflectionUtils ReflectionUtils.FieldCallback ReflectionUtils.FieldFilter ReflectionUtils.MethodCallback ReflectionUtils.MethodFilter ReflectiveAspectJAdvisorFactory ReflectiveAspectJAdvisorFactory.SyntheticInstantiationAdvisor ReflectiveLoadTimeWeaver ReflectiveMethodInvocation ReflectiveVisitorHelper Refreshable RefreshablePagedListHolder RefreshableScriptTargetSource RegexpMethodPointcutAdvisor ReloadableResourceBundleMessageSource RemoteAccessException RemoteAccessor RemoteConnectFailureException RemoteExporter RemoteInvocation RemoteInvocationBasedAccessor RemoteInvocationBasedExporter RemoteInvocationExecutor RemoteInvocationFactory RemoteInvocationResult RemoteInvocationTraceInterceptor RemoteInvocationUtils RemoteLookupFailureException RemoteProxyFailureException RemoteStatelessSessionBeanDefinitionParser ReplaceOverride Repository RequestAttributes RequestContext RequestContextAwareTag RequestContextFilter RequestContextHolder RequestContextListener RequestContextUtils RequestHandledEvent RequestScope RequestToViewNameTranslator RequestUtils Required RequiredAnnotationBeanPostProcessor Resource ResourceAllocationException ResourceArrayPropertyEditor ResourceBundleEditor ResourceBundleMessageSource ResourceBundleThemeSource ResourceBundleViewResolver ResourceEditor ResourceEditorRegistrar ResourceEntityResolver ResourceFactoryBean ResourceHolderSupport ResourceJobSchedulingDataProcessor ResourceLoader ResourceLoaderAware ResourceMapFactoryBean ResourceOverridingShadowingClassLoader ResourcePatternResolver ResourcePatternUtils ResourceScriptSource ResourceServlet ResourceUtils ResponseTimeMonitor ResponseTimeMonitorImpl ResultSetExtractor ResultSetSupportingSqlParameter ResultSetWrappingSqlRowSet ResultSetWrappingSqlRowSetMetaData RmiBasedExporter RmiClientInterceptor RmiClientInterceptorUtils RmiInvocationHandler RmiInvocationWrapper RmiProxyFactoryBean RmiRegistryFactoryBean RmiServiceExporter RollbackRuleAttribute RootBeanDefinition RootClassFilter RowCallbackHandler RowCountCallbackHandler RowMapper RowMapperResultSetExtractor RuleBasedTransactionAttribute RuntimeBeanNameReference RuntimeBeanReference RuntimeTestWalker SavepointManager ScheduledExecutorFactoryBean ScheduledExecutorTask ScheduledTimerListener ScheduledTimerTask SchedulerContextAware SchedulerFactoryBean SchedulingAwareRunnable SchedulingException SchedulingTaskExecutor Scope ScopedBeanInterceptor ScopedObject ScopedProxyBeanDefinitionDecorator ScopedProxyFactoryBean ScriptBeanDefinitionParser ScriptCompilationException ScriptFactory ScriptFactoryPostProcessor ScriptSource SelectedValueComparator SelectTag SelfNaming ServerSessionFactory ServerSessionFactory ServerSessionMessageListenerContainer ServerSessionMessageListenerContainer102 ServiceLocatorFactoryBean ServletConfigAware ServletContextAttributeExporter ServletContextAttributeFactoryBean ServletContextAware ServletContextAwareProcessor ServletContextFactoryBean ServletContextParameterFactoryBean ServletContextPropertyPlaceholderConfigurer ServletContextRequestLoggingFilter ServletContextResource ServletContextResourceLoader ServletContextResourcePatternResolver ServletEndpointSupport ServletForwardingController ServletRequestAttributes ServletRequestBindingException ServletRequestDataBinder ServletRequestHandledEvent ServletRequestParameterPropertyValues ServletRequestUtils ServletWebRequest ServletWrappingController SessionAwareMessageListener SessionBrokerSessionFactory SessionCallback SessionFactory SessionFactoryUtils SessionFactoryUtils SessionFactoryUtils SessionHolder SessionHolder SessionHolder SessionLocaleResolver SessionReadCallback SessionScope SessionThemeResolver SetFactoryBean ShadowingClassLoader SharedEntityManagerBean SharedEntityManagerCreator ShortCodedLabeledEnum SimpleApplicationEventMulticaster SimpleAsyncTaskExecutor SimpleConnectionHandle SimpleControllerHandlerAdapter SimpleControllerHandlerAdapter SimpleFormController SimpleFormController SimpleHttpInvokerRequestExecutor SimpleInstantiationStrategy SimpleInstrumentableClassLoader SimpleJdbcDaoSupport SimpleJdbcOperations SimpleJdbcTemplate SimpleLoadTimeWeaver SimpleLocaleContext SimpleMailMessage SimpleMappingExceptionResolver SimpleMappingExceptionResolver SimpleMessageConverter SimpleMessageConverter102 SimpleMessageListenerContainer SimpleMessageListenerContainer102 SimpleNamingContext SimpleNamingContextBuilder SimpleNativeJdbcExtractor SimplePortletHandlerAdapter SimplePortletPostProcessor SimplePropertyNamespaceHandler SimpleRecordOperation SimpleReflectiveMBeanInfoAssembler SimpleRemoteSlsbInvokerInterceptor SimpleRemoteStatelessSessionProxyFactoryBean SimpleSaxErrorHandler SimpleServerSessionFactory SimpleServletHandlerAdapter SimpleServletPostProcessor SimpleTheme SimpleThreadPoolTaskExecutor SimpleThrowawayClassLoader SimpleTraceInterceptor SimpleTransactionStatus SimpleTransformErrorListener SimpleTriggerBean SimpleTypeConverter SimpleUrlHandlerMapping SingleColumnRowMapper SingleConnectionDataSource SingleConnectionFactory SingleConnectionFactory SingleConnectionFactory102 SingleDataSourceLookup SingleSessionFactory SingletonAspectInstanceFactory SingletonBeanFactoryLocator SingletonBeanRegistry SingletonMetadataAwareAspectInstanceFactory SingletonTargetSource SmartDataSource SmartMimeMessage SmartSessionBean SmartTransactionObject SortDefinition SourceExtractor SpringBeanJobFactory SpringBindingActionForm SpringConfiguredBeanDefinitionParser SpringJtaSynchronizationAdapter SpringLobCreatorSynchronization SpringModelMBean SpringPersistenceUnitInfo SpringResourceLoader SpringSessionContext SpringSessionSynchronization SpringSessionSynchronization SpringTemplateLoader SpringVersion SqlCall SQLErrorCodes SQLErrorCodesFactory SQLErrorCodeSQLExceptionTranslator SQLExceptionTranslator SqlFunction SqlInOutParameter SqlLobValue SqlMapClientCallback SqlMapClientDaoSupport SqlMapClientFactoryBean SqlMapClientOperations SqlMapClientTemplate SqlOperation SqlOutParameter SqlParameter SqlParameterSource SqlProvider SqlQuery SqlReturnResultSet SqlReturnType SqlRowSet SqlRowSetMetaData SqlRowSetResultSetExtractor SQLStateSQLExceptionTranslator SqlTypeValue SqlUpdate SQLWarningException StatementCallback StatementCreatorUtils StaticApplicationContext StaticLabeledEnum StaticLabeledEnumResolver StaticListableBeanFactory StaticMessageSource StaticMethodMatcher StaticMethodMatcherPointcut StaticMethodMatcherPointcutAdvisor StaticPortletApplicationContext StaticScriptSource StaticWebApplicationContext StopWatch StopWatch.TaskInfo StoredProcedure StringArrayPropertyEditor StringCodedLabeledEnum StringMultipartFileEditor StringTrimmerEditor StringUtils StylerUtils SynchedLocalTransactionFailedException SyncTaskExecutor SystemPropertyUtils TagIdGenerator TagUtils TagWriter TargetSource TargetSourceCreator TaskExecutor TextareaTag Theme ThemeChangeInterceptor ThemeResolver ThemeSource ThemeTag ThreadLocalTargetSource ThreadLocalTargetSourceStats ThreadPoolTaskExecutor ThrowawayController ThrowawayControllerHandlerAdapter ThrowsAdvice ThrowsAdviceAdapter ThrowsAdviceInterceptor TilesConfigurer TilesJstlView TilesView TimerFactoryBean TimerManagerFactoryBean TimerTaskExecutor TomcatInstrumentableClassLoader TopLinkAccessor TopLinkCallback TopLinkDaoSupport TopLinkInterceptor TopLinkJdbcException TopLinkJpaDialect TopLinkJpaVendorAdapter TopLinkOperations TopLinkOptimisticLockingFailureException TopLinkQueryException TopLinkSystemException TopLinkTemplate TopLinkTransactionManager ToStringCreator ToStringStyler Transactional TransactionAspectSupport TransactionAttribute TransactionAttributeEditor TransactionAttributeSource TransactionAttributeSourceAdvisor TransactionAttributeSourceEditor TransactionAwareConnectionFactoryProxy TransactionAwareConnectionFactoryProxy TransactionAwareDataSourceConnectionProvider TransactionAwareDataSourceConnectionProvider TransactionAwareDataSourceProxy TransactionAwarePersistenceManagerFactoryProxy TransactionAwareSessionAdapter TransactionCallback TransactionCallbackWithoutResult TransactionDefinition TransactionException TransactionInProgressException TransactionInterceptor TransactionProxyFactoryBean TransactionRolledBackException TransactionStatus TransactionSuspensionNotSupportedException TransactionSynchronization TransactionSynchronizationAdapter TransactionSynchronizationManager TransactionSynchronizationUtils TransactionSystemException TransactionTemplate TransactionTimedOutException TransactionUsageException TransformerUtils TransformTag TrueClassFilter TrueMethodMatcher TruePointcut TxAdviceBeanDefinitionParser TxNamespaceHandler TxNamespaceUtils TypeConverter TypeConverterDelegate TypeDefinitionBean TypedStringValue TypeMismatchDataAccessException TypeMismatchException TypeMismatchNamingException TypePatternClassFilter UiApplicationContextUtils UnableToRegisterMBeanException UnableToSendNotificationException UncategorizedDataAccessException UncategorizedJmsException UncategorizedSQLException UnexpectedRollbackException UnionPointcut UnitOfWorkCallback UnknownAdviceTypeException UnsatisfiedDependencyException UpdatableSqlQuery UrlBasedRemoteAccessor UrlBasedViewResolver URLEditor UrlFilenameViewController UrlPathHelper UrlResource UserCredentialsConnectionFactoryAdapter UserCredentialsDataSourceAdapter UserRoleAuthorizationInterceptor UserRoleAuthorizationInterceptor UserTransactionAdapter UtilNamespaceHandler ValidationUtils Validator ValueFormatter ValueStyler VelocityConfig VelocityConfigurer VelocityEngineFactory VelocityEngineFactoryBean VelocityEngineUtils VelocityLayoutView VelocityLayoutViewResolver VelocityToolboxView VelocityView VelocityViewResolver View ViewRendererServlet ViewResolver WeakReferenceMonitor WeakReferenceMonitor.ReleaseListener WeavingTransformer WebApplicationContext WebApplicationContextUtils WebApplicationContextVariableResolver WebApplicationObjectSupport WebAppRootListener WebContentGenerator WebContentInterceptor WebDataBinder WebLogicJndiMBeanServerFactoryBean WebLogicJtaTransactionManager WebLogicMBeanServerFactoryBean WebLogicNativeJdbcExtractor WebLogicServerTransactionManagerFactoryBean WebRequest WebRequestHandlerInterceptorAdapter WebRequestHandlerInterceptorAdapter WebRequestInterceptor WebSphereNativeJdbcExtractor WebSphereTransactionManagerFactoryBean WebUtils WorkManagerTaskExecutor XAPoolNativeJdbcExtractor XmlBeanDefinitionParser XmlBeanDefinitionReader XmlBeanFactory XmlPortletApplicationContext XmlReaderContext XmlValidationModeDetector XmlViewResolver XmlWebApplicationContext XsltView XsltViewResolver

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值