Heim > Java > javaLernprogramm > Hauptteil

Detaillierte Erläuterung der fünf Injektionsmethoden der Spring-Transaktionskonfiguration

Y2J
Freigeben: 2017-05-02 11:37:32
Original
1922 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich die fünf Injektionsmethoden der Spring-Transaktionskonfiguration im Detail vorgestellt. Er hat einen gewissen Referenzwert und interessierte Freunde können darauf verweisen.

Ich habe vor einiger Zeit eingehend über die Transaktionskonfiguration von Spring recherchiert. Obwohl ich die Transaktionskonfiguration von Spring in diesem Zeitraum konfiguriert habe, hatte ich nie ein klares Verständnis davon. Durch diese Studie habe ich herausgefunden, dass die Transaktionskonfiguration von Spring relativ einfach zu beherrschen ist, solange die Ideen geklärt sind.

Die Zusammenfassung lautet wie folgt:

Die Transaktionskonfiguration in der Spring-Konfigurationsdatei besteht immer aus drei Komponenten, nämlich DataSource, TransactionManager und Proxy-Mechanismus. Egal wo A Bei der Konfigurationsmethode ändert sich im Allgemeinen nur der Proxy-Mechanismus.

DataSource und TransactionManager ändern sich nur entsprechend der Datenzugriffsmethode. Wenn Sie beispielsweise den Ruhezustand für den Datenzugriff verwenden, ist die DataSource tatsächlich SessionFactory und die Implementierung von TransactionManager ist HibernateTransactionManager.

Die Details lauten wie folgt:

Entsprechend den verschiedenen Proxy-Mechanismen werden fünf Spring-Transaktionskonfigurationsmethoden zusammengefasst Die Dateien lauten wie folgt:

Erster Weg: Jede Bean hat einen Proxy


<?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:context="http://www.springframework.org/schema/context" 
 xmlns:aop="http://www.springframework.org/schema/aop" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 www.springframework.org/schema/beans/spring-beans-2.5.xsd 
 www.springframework.org/schema/context 
 www.springframework.org/schema/context/spring-context-2.5.xsd 
 www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> 
 
 <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>
Nach dem Login kopieren

Kapitel Zweiter Weg: Alle Beans teilen sich eine Proxy-Basisklasse

<?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:context="http://www.springframework.org/schema/context" 
 xmlns:aop="http://www.springframework.org/schema/aop" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 www.springframework.org/schema/beans/spring-beans-2.5.xsd 
 www.springframework.org/schema/context 
 www.springframework.org/schema/context/spring-context-2.5.xsd 
 www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> 
 
 <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>
Nach dem Login kopieren

Dritter Weg: Interceptor verwenden

<?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:context="http://www.springframework.org/schema/context" 
 xmlns:aop="http://www.springframework.org/schema/aop" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 www.springframework.org/schema/beans/spring-beans-2.5.xsd 
 www.springframework.org/schema/context 
 www.springframework.org/schema/context/spring-context-2.5.xsd 
 www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> 
 
 <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>
Nach dem Login kopieren

Vierter Weg: Verwenden Sie den mit konfigurierten Interceptor das tx-Tag

<?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:context="http://www.springframework.org/schema/context" 
 xmlns:aop="http://www.springframework.org/schema/aop" 
 xmlns:tx="http://www.springframework.org/schema/tx" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 www.springframework.org/schema/beans/spring-beans-2.5.xsd 
 www.springframework.org/schema/context 
 www.springframework.org/schema/context/spring-context-2.5.xsd 
 www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
 www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 
 
 <context:annotation-config /> 
 <context:component-scan base-package="com.bluesky" /> 
 
 <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> 
 
 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 
 <tx:attributes> 
 <tx:method name="*" propagation="REQUIRED" /> 
 </tx:attributes> 
 </tx:advice> 
 
 <aop:config> 
 <aop:pointcut id="interceptorPointCuts" 
 expression="execution(*com.bluesky.spring.dao.*.*(..))" /> 
 <aop:advisor advice-ref="txAdvice" 
 pointcut-ref="interceptorPointCuts" /> 
 </aop:config> 
 </beans>
Nach dem Login kopieren

Die fünfte Methode: vollständige Annotation

<?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:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
   www.springframework.org/schema/beans/spring-beans-2.5.xsd
   www.springframework.org/schema/context
   www.springframework.org/schema/context/spring-context-2.5.xsd
   www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
   www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

 <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>
Nach dem Login kopieren

muss zu diesem Zeitpunkt dem DAO hinzugefügt werden @Transactional Annotation, wie folgt:

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();
 }  
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der fünf Injektionsmethoden der Spring-Transaktionskonfiguration. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage