用BeanNameAutoProxyCreator自动创建事务代理

用BeanNameAutoProxyCreator自动创建事务代理
下面介绍一种优秀的事务代理配置策略:采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统自动创建。容器中的目标bean自动消失,避免需要使用嵌套bean来保证目标bean不可被访问。
这种配置方式依赖于Spring提供的bean后处理器,该后处理器用于为每个bean自动创建代理,此处的代理不仅可以是事务代理,也可以是任意的代理,只需要有合适的拦截器即可。

下面是采用BeanNameAutoProxyCreator配置事务代理的配置文件:
[xhtml] view plaincopy

<?xml version="1.0" encoding="gb2312"?>  
<!--  Spring配置文件的文件头,包含DTD等信息-->  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"  
    "[url]http://www.springframework.org/dtd/spring-beans.dtd[/url]">  
<beans>  
    <!--定义数据源-->  
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <!--  定义数据库驱动-->  
            <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>  
        <!--  定义数据库url-->  
            <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>  
    <!--定义一个hibernate的SessionFactory-->  
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <!--  定义SessionFactory必须注入DataSource-->  
            <property name="dataSource"><ref local="dataSource"/></property>  
            <property name="mappingResources">  
            <list>  
                <!--以下用来列出所有的PO映射文件-->  
                <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>  
    <!--  定义事务管理器,使用适用于Hibernte的事务管理器-->  
<bean id="transactionManager"  
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
            <!--  HibernateTransactionManager  bean需要依赖注入一个SessionFactory bean的引用-->  
            <property name="sessionFactory"><ref local="sessionFactory"/></property>  
</bean>   
    <!--  配置事务拦截器-->  
<bean id="transactionInterceptor"  
class="org.springframework.transaction.interceptor.TransactionInterceptor">  
        <!--  事务拦截器bean需要依赖注入一个事务管理器 -->  
        <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
个人分类: spring 持久层
上一篇Java、Json转换方式之三:Fastjson
下一篇spring security控制权限的几种方法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭