这种配置方式与BeanNameAutoProxyCreator自动创建代理的方式非常相似,都是使用bean后处理器为目标bean创建实物代理,区别是前者使用事务拦截器创建代理,后者需要使用Advisor创建事务代理。
事实上,采用DefaultAdvisorAutoProxyCreator的事务代理配置方式更加简洁,这个代理生成器自动搜索Spring容器中的Advisor,并为容器中所有的bean创建代理。
相对前一种方式,这种方式的可读性不如前一种直观,笔者还是推荐采用第三种配置方式,下面是使用DefaultAdvisorAutoProxyCreator的配置方式
-
<?xml version="1.0" encoding="gb2312"?>
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
- "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
-
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
-
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
-
<property name="url"><value>jdbc:mysql://localhost:3306/spring</value></property>
-
<property name="username"><value>root</value></property>
-
<property name="password"><value>32147</value></property>
- </bean>
-
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
-
<property name="dataSource"><ref local="dataSource"/></property>
-
<property name="mappingResources">
- <list>
-
<value>Person.hbm.xml</value>
- </list>
- </property>
-
<property name="hibernateProperties">
- <props>
- <!--此处用来定义hibernate的SessionFactory的属性:
- 不同数据库连接,启动时选择create,update,create-drop-->
-
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
-
<prop key="hibernate.hbm2ddl.auto">update</prop>
- </props>
- </property>
- </bean>
-
<bean id="transactionManager"
-
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
-
<property name="sessionFactory"><ref local="sessionFactory"/></property>
- </bean>
-
<bean id="transactionInterceptor"
-
class="org.springframework.transaction.interceptor.TransactionInterceptor">
-
<property name="transactionManager" ref="transactionManager"/>
-
<property name="transactionAttributes">
- <props>
-
<prop key="insert*">PROPAGATION_REQUIRED</prop>
-
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
-
<prop key="*">PROPAGATION_REQUIRED</prop>
- </props>
- </property>
- </bean>
-
<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
-
<property name="transactionInterceptor" ref="transactionInterceptor"/>
- </bean>
-
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
-
<bean id="personDao" class="lee.PersonDaoHibernate">
-
<property name="sessionFactory"><ref local="sessionFactory"/></property>
- </bean>
- </beans>
在这种配置方式下,配置文件变得更加简洁,增加目标bean,不需要增加任何额外的代码,容器自动为目标bean生成代理。但这种方式的可读性相对较差 转载:http://mopdzz.itpub.net/post/20166/470140
分享到:
相关推荐
spring实现的自动代理配置!用到的关键类org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator
Spring AOP源码01:Jdk动态代理底层源码 Spring AOP源码02:ProxyFactory Spring AOP源码03:JdkDynamicAopProxy Spring AOP源码04:MethodInvocation 拦截器调用 Spring AOP源码05:DefaultAdvisorAutoProxyCreator...
3.6.3 元数据自动代理 3.7 小结 第二部分 Spring在业务层的应用 第4章 征服数据库 4.1 学习Spring的DAO理念 4.1.1 理解Spring的DataAccessException 4.1.2 与DataSource一起工作 4.1.3...
12.8.使用“自动代理”功能 12.8.1.自动代理对象的定义 12.8.1.1.ObjectNameAutoProxyCreator 12.8.1.2.DefaultAdvisorAutoProxyCreator 12.8.1.3.AbstractAutoProxyCreator 12.8.2.使用特性驱动的自动代理 12.9....
7.9. 使用“自动代理(autoproxy)”功能 7.9.1. 自动代理bean定义 7.9.1.1. BeanNameAutoProxyCreator 7.9.1.2. DefaultAdvisorAutoProxyCreator 7.9.1.3. AbstractAdvisorAutoProxyCreator 7.9.2. 使用元数据驱动...
IntroductionInterceptor DelegatingIntroductionInterceptor Autoproxing 自动代理可以让您不用为每一个要被 Advised 的 Target 手动定义代理物件,透过 Bean 名称或是 Pointcut 的比对,自动为...
经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...
经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...
Spring的Ioc Spring的AOP , AspectJ Spring的事务管理 , 三大框架的整合 目录 1.1 Spring 框架学习路线:..........................................................................................................