`
izuoyan
  • 浏览: 9403547 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用DefaultAdvisorAutoProxyCreator自动创建事务代

阅读更多
用DefaultAdvisorAutoProxyCreator自动创建事务代理
2008年04月25日 星期五 09:36

-----------------------------------------------------------------------------------------------------------
Spring编程式事务管理
用DefaultAdvisorAutoProxyCreator自动创建事务代理
-----------------------------------------------------------------------------------------------------------
drop TABLE sampledb.orders;
CREATE TABLE sampledb.orders(
`ID` BIGINT NOT NULL,
`ORDER_NUMBER` VARCHAR(15),
`CUSTOMER_ID` BIGINT,
PRIMARY KEY(`ID`)
)
ENGINE = InnoDB;

drop TABLE `sampledb`.`customers`;
CREATE TABLE `sampledb`.`customers` (
`ID` BIGINT NOT NULL,
`NAME` VARCHAR(45),
PRIMARY KEY(`ID`)
)
ENGINE = InnoDB;


alter table sampledb.orders
add constraint constraint_constraint_fk
foreign key (CUSTOMER_ID)
references sampledb.customers(ID);

-----------------------------------------------------------------------------------------------------------
applicationContext.xml
-----------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">


<bean
>
<property
value="com.mysql.jdbc.Driver">
</property>
<property
value="jdbc:mysql://localhost:3306/sampledb">
</property>
<property value="root"></property>
</bean>
<bean
>
<property >
<ref bean="localMysql" />
</property>
<property >
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property >
<list>
<value>db/Orders.hbm.xml</value>
<value>db/Customers.hbm.xml</value>
</list>
</property>
</bean>

<!-- 定义事务管理器,使用适用于Hibernte的事务管理器-->
<bean
>
<!-- HibernateTransactionManager bean需要依赖注入一个SessionFactory bean的引用-->
<property >
<ref local="localSessionFactory" />
</property>
</bean>



<!-- 配置事务拦截器-->
<bean
>
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property ref="transactionManager" />
<property >
<!-- 下面定义事务传播属性-->
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>

</props>
</property>
</bean>
<!-- 定义事务Advisor-->
<bean
>
<!-- 定义advisor时,必须传入Interceptor-->
<property
ref="transactionInterceptor" />
</bean>
<!-- DefaultAdvisorAutoProxyCreator搜索容器中的 advisor,并为每个bean创建代理 -->
<bean
/>
<!--定义DAO Bean ,由于BeanNameAutoProxyCreator自动生成事务代理-->
<bean >
<property >
<ref local="localSessionFactory" />
</property>
</bean>
</beans>



-----------------------------------------------------------------------------------------------------------
Demo.java
-----------------------------------------------------------------------------------------------------------
package test;
/**
* 用DefaultAdvisorAutoProxyCreator自动创建事务代理
*/
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import db.Customers;
public class Demo {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
test.IUserDAO dao = (test.IUserDAO) ctx.getBean("userDAOTarget");
Customers c = new Customers();
c.setId(3l);
c.setName("xxx");
dao.insertUser(c);
System.out.println("END");
}
}



-----------------------------------------------------------------------------------------------------------

package db;
import java.util.List;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.springframework.context.ApplicationContext;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;
import test.IUserDAO;

public class CustomersDAO extends HibernateDaoSupport implements IUserDAO {
private static final Log log = LogFactory.getLog(CustomersDAO.class);

protected void initDao() {
// do nothing
}
private TransactionTemplate transactionTemplate;
public void setTransactionManager(
PlatformTransactionManager transactionManager) {
this.transactionTemplate = new TransactionTemplate(transactionManager);
}
public void insertUser(Customers transientInstance) {
getHibernateTemplate().saveOrUpdate(transientInstance);
// 下面两行代码没有实际意义,仅仅为了引发数据库异常
//DataSource ds = null;
//DataSourceUtils.getConnection(ds);
}
public void save(Customers transientInstance) {
log.debug("saving Customers instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
}
-----------------------------------------------------------------------------------------------------------

package test;

import db.Customers;

public interface IUserDAO {

public void insertUser(Customers c);

}

-----------------------------------------------------------------------------------------------------------
分享到:
评论

相关推荐

    使用DefaultAdvisorAutoProxyCreator实现spring的自动代理

    `DefaultAdvisorAutoProxyCreator`是Spring AOP中用于实现自动代理创建的核心类,它根据配置的顾问来决定哪些bean需要被代理以及如何代理。下面我们将深入探讨`DefaultAdvisorAutoProxyCreator`的工作原理及其在实际...

    JavaEE spring自动实现AOP代理

    - Spring通过`DefaultAdvisorAutoProxyCreator`组件自动创建代理。当它检测到容器中有Advisor或Aspect对象时,会为匹配的bean创建代理。 - `@EnableAspectJAutoProxy`注解可以启用基于AspectJ的自动代理,使Spring...

    spring 的自动代理

    `DefaultAdvisorAutoProxyCreator` 是 Spring 自动代理实现的核心类,它负责根据Advisor创建代理对象。 在提供的配置中,我们看到以下几个关键组件: 1. **Bean `person`** - 这是一个名为 `PersonCon` 的类的实例...

    spring 事务(6中配置完全降解)

    `DefaultAdvisorAutoProxyCreator`是Spring AOP中用于自动创建代理的组件,它会寻找所有`Advisor`(包括事务增强`Advisor`),并将它们应用到相关的bean上。这样,我们可以通过定义`Pointcut`来决定哪些方法需要...

    spring 事务代理配置

    2. **使用BeanNameAutoProxyCreator**:根据Bean名称自动创建事务代理,这需要对Spring AOP有更深入的理解。 3. **使用DefaultAdvisorAutoProxyCreator**:与`BeanNameAutoProxyCreator`类似,但其配置的可读性可能...

    spring代理详解.txt

    `DefaultAdvisorAutoProxyCreator`是Spring中最常用的自动代理创建者,它会自动将所有符合条件的advisor应用到所有的bean上。与`BeanNameAutoProxyCreator`不同,它不依赖于bean名称,而是依赖于advisor的pointcut...

    jdk与cglib动态代理与底层实现

    Spring的`DefaultAdvisorAutoProxyCreator`会根据配置的Advisor自动创建代理,而`Advised`接口提供了对代理设置和获取各种配置信息的能力,如拦截器链。 4. **底层实现原理**: - **JDK代理**:JDK动态代理使用...

    Spring声明式事务和@Aspect的拦截顺序问题的解决

    3. 根据 Advisor 的匹配机制自动创建代理,实现类 DefaultAdvisorAutoProxyCreator 其中,@Aspect 声明的 AOP 是通过 AnnotationAwareAspectJAutoProxyCreator 进行代理的,而声明式事务是 ...

    模拟spring aop【一】基于jdk动态代理实现的aop

    - Spring AOP提供了`DefaultAdvisorAutoProxyCreator`,它可以自动为匹配的Bean创建JDK代理。 - 切面(Aspect)是Spring AOP的核心,它封装了通知(Advice),通知定义了切面的逻辑。例如,我们可以创建一个`...

    小马哥讲 Spring AOP 编程思想 - API 线索图.pdf

    - **自动模式**:指的是Spring AOP的自动代理创建功能,即不需要手动指定代理对象,而是通过配置自动创建。 - **AbstractAutoProxyCreator**:一个抽象类,它实现了自动创建代理对象的逻辑。 - **...

    Spring AOP

    - **DefaultAdvisorAutoProxyCreator**:自动代理创建器,它会扫描所有的Advisor并为匹配的bean创建代理。 - **AbstractAutoProxyCreator**:自动代理创建器的抽象基类,提供了创建代理的基本逻辑。 - **...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. Spring JDBC包结构...

    spring-note

    - 通过指定 Bean 的名称来自动创建代理对象。 2. **DefaultAdvisorAutoProxyCreator**: - 自动为所有的 Advisor 创建代理。 #### 第四章 Spring 对持久层的支持 ##### 一、Spring 对持久层支持采用的策略 - *...

    Spring.3.x企业应用开发实战(完整版).part2

    6.5 自动创建代理 6.5.1 实现类介绍 6.5.2 BeanNameAutoProxyCreator 6.5.3 DefaultAdvisorAutoProxyCreator 6.6 小结 第7章 基于@AspectJ和Schema的AOP 7.1 Spring对AOP的支持 7.2 JDK 5.0注解知识快速进阶 7.2.1 ...

    spring.net中文手册在线版

    14.4.用事务进行资源同步 14.4.1.高层次方法 14.4.2.低层次方法 14.5.声明式事务管理 14.5.1.理解Spring.NET声明式事务管理的实现 14.5.2.第一个例子 14.5.3.Transaction特性的设置 14.5.4.通过AutoProxyCreator使用...

    Spring3.x企业应用开发实战(完整版) part1

    6.5 自动创建代理 6.5.1 实现类介绍 6.5.2 BeanNameAutoProxyCreator 6.5.3 DefaultAdvisorAutoProxyCreator 6.6 小结 第7章 基于@AspectJ和Schema的AOP 7.1 Spring对AOP的支持 7.2 JDK 5.0注解知识快速进阶 7.2.1 ...

    spring-aop.jar

    在spring-aop.jar中,`org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator`类负责自动创建代理并织入切面。 三、Spring AOP的使用 在实际应用中,我们可以利用Spring AOP进行日志记录、...

    SpringNote.pdf

    - **DefaultAdvisorAutoProxyCreator**:根据Advisor自动创建代理。 #### 八、Spring对持久层的支持 **8.1 Spring对持久层支持采用的策略** - Spring通过提供多种数据访问抽象层,简化了与数据库交互的过程。 **...

Global site tag (gtag.js) - Google Analytics