La configuration des transactions dans les fichiers de configuration de Spring se compose toujours de trois parties, à savoir le mécanisme de source de données, de transactionManager et de proxy. Peu importe la méthode de configuration configurée, le mécanisme proxy est généralement modifié.
DataSource et TransactionManager ne changent que en fonction de la méthode d'accès aux données. Par exemple, lors de l'utilisation de HiberNate pour l'accès aux données, DataSource est en fait un SessionFactory et TransactionManager est implémenté en tant que HiberNateTransActionManager.
Les détails sont les suivants:
Selon les différents mécanismes proxy, cinq méthodes de configuration de transaction Spring sont résumées et les fichiers de configuration sont les suivants:
La première méthode: chaque haricot a un agent
<? 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.springframeworkwork.org/schema/bans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.xsdd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd "> <bean id =" sessionfactory "> <propriété nom =" configlocation "value =" classpath: hibernate.cfg.xm " name = "ConfigurationClass" value = "org.hibernate.cfg.annotationConfiguration" /> </anEn> <! - Définissez le gestionnaire de transactions (transaction déclarative) -> <bean id = "TransactionManager"> <propriété Name = "SessionFactory" Ref = "SessionFactory" /> </ean> <! name = "sessionfactory" ref = "sessionfactory" /> </ank> <bean id = "userdao"> <! - Configurer le gestionnaire de transaction -> <propriété name = "transactionManager" ref = "transactionManager" /> <propriété name = "cible" Ref = "userdaotarget" /> <propriété name = "proxyinterfaces" value = "com.BlueSky.spring.dao.Generatora" /> <! - Configurer les propriétés de transaction -> <propriété name = "TransactionAttributes"> <props> <prop key = "*"> propagation_required </prop> </pops> </ propriété> </bans>
La deuxième méthode: tous les haricots partagent une classe de base 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.springframeworkwork.org/schema/bans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.xsdd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd "> <bean id =" sessionfactory "> <propriété nom =" configlocation "value =" classpath: hibernate.cfg.xm " name = "ConfigurationClass" value = "org.hibernate.cfg.annotationConfiguration" /> </anEn> <! - Définir le gestionnaire de transaction (transaction déclarée) -> <bean id = "TransactionManager"> <propriété name = "SessionFactory" Ref = "SessionFactory" /> </Ean> <id = "TransactionBase" Lazy-in-init = "true" AbstracT = <! Manager -> <propriété name = "TransactionManager" Ref = "TransactionManager" /> <! - Configurer les propriétés de transaction -> <propriété name = "TransactionAttributes"> <popps> </ propriété> </pEAND> <! - Configure Dao -> <Bean Id = "UserDaotarget"> <! ref = "SessionFactory" /> </-bean> <bean id = "userdao" parent = "transactionbase"> <propriété name = "cible" ref = "userdaotarget" /> </-bean> </bans>
La troisième façon: utilisez un intercepteur
<? 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.springframeworkwork.org/schema/bans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.xsdd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd "> <bean id =" sessionfactory "> <propriété nom =" configlocation "value =" classpath: hibernate.cfg.xm " name = "ConfigurationClass" value = "org.hibernate.cfg.annotationConfiguration" /> </anEn> <! - Définir le gestionnaire de transaction (la transaction déclarée) -> <bean id = "TransactionManager"> <Propriété Name = "SessionFactory" Ref = "SessionFactory" /> </EAN> <Bean ID = "Transaction Inceptor"> <propriété Nom = "TransactionManage" <! - Configurer les propriétés de transaction -> <propriété name = "TransactionAttributes"> <props> <prop key = "*"> propagation_required </prop> </props> </props> </ propriété> </ bean> <ank <value> TransactionInterceptor </value> </ list> </ propriété> </ bean> <! - Configurez dao -> <bean id = "userdao"> <propriété name = "sessionfactory" ref = "sessionfactory" /> </ank> </bans>
La quatrième méthode: Interceptor configuré à l'aide de la balise TX
<? 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.springframeworkwork.org/schema/tx" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-20 http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx-pring-tx-2.5.xsd " /> <Context: Component-Scan Base-Package = "com.bluesky" /> <bean id = "sessionfactory"> <propriété name = "configLocation" value = "classpath: hibernate.cfg.xml" /> <property name = "configurationClass" value = "org.hibernate.cfg.annotationConfiguration" /> </ bean> <! -> <bean id = "TransactionManager"> <propriété name = "sessionfactory" ref = "sessionfactory" /> </ bean> <tx: conseils id = "txadvice" transaction-manager = "transactionManager"> <tx: attributes> <tx: méthode name = "*" propagation = "requis" /> </tx: attributs> <aop: Pointcut id = "interceptorpointcuts" expression = "EXECUTION (* com.bluesky.spring.dao. *. * (..))" /> <aop: conseiller conseils-ref = "txadvice" Pointcut-ref = "InterceptOrpointcuts" /> </ aop: config> </EANTS>
La cinquième méthode: annotation complète
<? 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.springframeworkwork.org/schema/tx" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-20 http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx-pring-tx-2.5.xsd " /> <Context: Component-Scan Base-Package = "com.bluesky" /> <tx: Annotation-Driven Transaction-manager = "TransactionManager" /> <Bean Id = "SessionFactory"> <propriété name = "configLocation" value = "ClassPath" Value = "org.hibernate.cfg.annotationConfiguration" /> </ bean> <! - Définissez le gestionnaire de transaction (transaction déclarative) -> <bean id = "TransactionManager"> <propriété name = "sessionfactory" Ref = "SessionFactory" /> </ Bean> </ Beans>
Pour le moment, vous devez ajouter une annotation @transactionnelle au DAO, comme suit:
Package com.mktao.spring.dao; Importer java.util.list; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.Support.hibernatedaosupport; import org.springframework.sterereotype.Component; import com.bluesky.spring.domain.user; @ Transactional @ Component ("UserDao") La classe publique UserDaOIMPL étend HiberNatedAosupport implémente userDao {public list <serv> listUsers () {return this.getSession (). CreateQuery ("From User"). List (); } ...}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.