`

Spring配置的几种方式

阅读更多

       根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:

 

    第一种方式:每个Bean都有一个代理

   

<bean id="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  

        <property name="configLocation" value="classpath:hibernate.cfg.xml" />  

<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />

    </bean>  

 

    <!-- 定义事务管理器(声明式的事务) -->  

    <bean id="transactionManager"

        class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        <property name="sessionFactory" ref="sessionFactory" />

    </bean>

    

    <!-- 配置DAO -->

    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">

        <property name="sessionFactory" ref="sessionFactory" />

    </bean>

    

    <bean id="userDao"  

        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  

           <!-- 配置事务管理器 -->  

        <property name="transactionManager" ref="transactionManager" />     

        <property name="target" ref="userDaoTarget" />  

        <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />

        <!-- 配置事务属性 -->  

        <property name="transactionAttributes">  

            <props>  

                <prop key="*">PROPAGATION_REQUIRED</prop>

            </props>  

        </property>  

    </bean>  

</beans>

 

 

 

    第二种方式:所有Bean共享一个代理基类

 

    <bean id="sessionFactory"  

            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  

        <property name="configLocation" value="classpath:hibernate.cfg.xml" />  

<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />

    </bean>  

 

    <!-- 定义事务管理器(声明式的事务) -->  

    <bean id="transactionManager"

        class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        <property name="sessionFactory" ref="sessionFactory" />

    </bean>

    

    <bean id="transactionBase"  

            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  

            lazy-init="true" abstract="true">  

        <!-- 配置事务管理器 -->  

        <property name="transactionManager" ref="transactionManager" />  

        <!-- 配置事务属性 -->  

        <property name="transactionAttributes">  

            <props>  

                <prop key="*">PROPAGATION_REQUIRED</prop>  

            </props>  

        </property>  

    </bean>    

   

    <!-- 配置DAO -->

    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">

        <property name="sessionFactory" ref="sessionFactory" />

    </bean>

    <bean id="userDao" parent="transactionBase" >  

        <property name="target" ref="userDaoTarget" />   

    </bean>

</beans>

  

 

 

    第三种方式:使用拦截器

   

 <bean id="sessionFactory"  

            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  

        <property name="configLocation" value="classpath:hibernate.cfg.xml" />  

        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />

    </bean>  

 

    <!-- 定义事务管理器(声明式的事务) -->  

    <bean id="transactionManager"

        class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        <property name="sessionFactory" ref="sessionFactory" />

    </bean> 

   

    <bean id="transactionInterceptor"  

        class="org.springframework.transaction.interceptor.TransactionInterceptor">  

        <property name="transactionManager" ref="transactionManager" />  

        <!-- 配置事务属性 -->  

        <property name="transactionAttributes">  

            <props>  

                <prop key="*">PROPAGATION_REQUIRED</prop>  

            </props>  

        </property>  

    </bean>

      

    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  

        <property name="beanNames">  

            <list>  

                <value>*Dao</value>

            </list>  

        </property>  

        <property name="interceptorNames">  

            <list>  

                <value>transactionInterceptor</value>  

            </list>  

        </property>  

    </bean>  

    <!-- 配置DAO -->

    <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">

        <property name="sessionFactory" ref="sessionFactory" />

    </bean>

</beans>

 

 

  第四种方式:全注解

    

<context:annotation-config />

    <context:component-scan base-package="com.bluesky" />

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="sessionFactory"  

            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  

        <property name="configLocation" value="classpath:hibernate.cfg.xml" />  

        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />

    </bean>  

 

    <!-- 定义事务管理器(声明式的事务) -->  

    <bean id="transactionManager"

        class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        <property name="sessionFactory" ref="sessionFactory" />

    </bean>

</beans>

此时在DAO上需加上@Transactional注解,如下:

 

package com.bluesky.spring.dao;

 

import java.util.List;

 

import org.hibernate.SessionFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import org.springframework.stereotype.Component;

import com.bluesky.spring.domain.User;

@Transactional

@Component("userDao")

public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

    public List<User> listUsers() {

        return this.getSession().createQuery("from User").list();

    }

}

 

 

 

   

分享到:
评论

相关推荐

    Spring配置的5种方式

    ### Spring配置的5种方式详解 #### 一、引言 在Java开发领域,特别是针对企业级应用,Spring框架作为一款轻量级的容器管理工具,不仅提供了强大的依赖注入功能,还支持多种事务管理策略。Struts2+Spring+Hibernate...

    spring学习:依赖注入的几种方式讨论

    Spring Boot引入了一种更智能的依赖注入方式——自动配置。自动配置是通过`@EnableAutoConfiguration`注解启动的,它根据项目中的类路径和特定条件自动配置Bean。例如,如果类路径下存在`MongoClient`的jar,Spring ...

    spring AOP配置的几种方式

    本文主要介绍几种常见的Spring AOP配置方式,并通过具体的示例来说明每种配置的特点。 #### 二、AOP配置所需基本元素 配置AOP时需要以下三个基本元素: 1. **Advice**:这是实际执行的代码,即我们所说的“切面”...

    spring几种Dao支持配置

    以下将详细阐述Spring对DAO支持的几种配置方式: 1. **JDBC DAO支持:** Spring通过`JdbcTemplate`和`SimpleJdbcInsert`等类提供了对JDBC的抽象,减少了直接使用JDBC代码的繁琐性。`JdbcTemplate`提供了一组模板...

    Spring三种注入方式(三)

    除了以上三种方式,Spring还提供了基于注解的元数据注入,如`@Resource`、`@Qualifier`等,以及XML配置文件中的`&lt;bean&gt;`标签等方式进行依赖注入。在实际开发中,可以根据需求选择合适的方式,通常推荐使用构造器注入...

    关于spring boot中几种注入方法的一些个人看法

    Spring Boot 中的几种注入方法 在 Spring Boot 中,注入是一种非常重要的机制,用于将 bean 对象注入到其他 bean 对象中,以便实现松耦合和高内聚的设计目标。下面我们将对 Spring Boot 中的几种注入方法进行详细的...

    spring配置文件加密实现

    总结来说,Spring配置文件加密实现涉及到以下几个关键步骤: 1. 选择并实现加密算法(如AES)。 2. 使用TE网络技术创建透明加密的文件系统。 3. 自定义或调整Spring的启动流程,使其能够通过加密层读取配置文件。 4...

    spring的五种配置

    spring的五种配置,希望对你有帮助!

    spring几种事务配置详解【精】

    本文将深入探讨Spring中的几种事务配置方式,帮助开发者更好地理解和运用。 1. **编程式事务管理** 编程式事务管理是在代码中显式调用事务API来控制事务的开始、提交、回滚等操作。这种方式直接在业务逻辑代码中...

    Spring下配置几种常用连接池及配置详解

    本篇文章将详细探讨在Spring环境下配置几种常用的数据库连接池,并提供配置属性的详尽解析和实例应用。 1. **HikariCP** HikariCP是目前非常流行的一款高性能连接池,以其轻量级、高效而受到广泛赞誉。在Spring中...

    Spring事务配置的五种方式

    Spring 事务配置的五种方式 Spring 框架中的事务配置是一种复杂的机制,涉及到多个组件的协作和配置。通过深入研究 Spring 的事务配置,可以总结出五种不同的配置方式,每种方式都有其特点和适用场景。 第一种方式...

    Spring定义bean的三种方式和自动注入

    下面将详细介绍这三种方式以及Spring的自动注入机制。 1. **基于XML的Bean定义**: 在XML配置中,我们通常在`applicationContext.xml`文件中定义Bean。例如,对于`Student`和`Teacher`类,我们分别创建`bean`标签...

    spring入门学习-6、AOP几种配置方式详解.pdf

    ### Spring AOP 几种配置方式详解 #### 一、Spring AOP 概述 Spring AOP(面向切面编程)是一种强大的编程模式,用于在应用程序中管理横切关注点,如日志记录、安全控制等。Spring 提供了多种方式来支持 AOP 的...

    Spring下配置几种常用连接池

    本文将深入探讨如何在Spring环境下配置几种常用的数据库连接池,包括HikariCP、Druid和Apache DBCP2。 一、HikariCP HikariCP被誉为最快的Java数据库连接池,它的设计目标是提供最小的延迟和最大的并发性能。在...

    Spring 集成 IBM MQ 监听配置

    Spring 集成 IBM MQ 监听配置,包括用户管理配置和一些基础配置信息

    Spring事务管理的几种配置方式,

    在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。Spring提供了多种事务管理配置方式,适合不同的应用场景...无论哪种方式,了解其原理和使用场景对于开发高效、可靠的Spring应用至关重要。

    Spring事务五种不同的代理配置

    第一种方式需要手动配置事务规则,而第二、三种方式通过注解简化了配置,第四种方式适用于不依赖接口的情况,第五种方式则提供了最大的灵活性。在实际开发中,我们通常会选择基于注解的声明式事务管理,因为它既简洁...

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    Spring 中的 Quartz 配置-Spring 定时器-java 定时器 在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java ...

    Spring事务原理、Spring事务配置的五种方式

    Spring事务原理是指Spring框架中的一种机制,用于管理事务,并提供了多种配置方式。事务是指一系列的操作,作为一个整体执行,如果其中某个操作失败,整个事务将回滚。Spring事务原理围绕着两个核心:...

    定时器的配置文件(两种方式:springmvc自带定时,Quartz与spring结合的定时)

    在Spring配置文件(如`applicationContext.xml`)中配置Quartz的SchedulerFactoryBean。 ```xml &lt;bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; ...

Global site tag (gtag.js) - Google Analytics