A configuração da transação nos arquivos de configuração do Spring sempre consiste em três partes, a saber, o DataSource, transactionManager e o mecanismo de proxy. Não importa qual método de configuração esteja configurado, o mecanismo de proxy geralmente é alterado.
DataSource e TransactionManager só mudarão de acordo com o método de acesso a dados. Por exemplo, ao usar o Hibernate para acesso a dados, o DataSource é na verdade uma sessão de fábrica e o TransactionManager é implementado como HibernateTransactionManager.
Os detalhes são os seguintes:
De acordo com os diferentes mecanismos de proxy, cinco métodos de configuração de transação de primavera estão resumidos e os arquivos de configuração são os seguintes:
O primeiro método: cada feijão tem um agente
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" 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-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <bean id="sessionFactory" > <property name="configLocation" value="classpath:hibernate.cfg.xml" /> <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> </bean> <!-- Define the transaction manager (declarative transaction) --> <bean id="transactionManager" > <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- Configure DAO --> <bean id="userDaoTarget"> <property name = "sessionFactory" ref = "sessionFactory" /> </ Bean> <bean id = "userDao"> <!-Configurar gerenciador de transações-> <propriedade name = "transactionManager" ref = "transactionManager" /> <names name "alvo" = "userdatarget" /> <nome do nome "" Proxyinterfincie "" value = "com.bluesky.spring.dao.generatordao"/> <!-Configurar Propriedades da transação-> <propriedade name = "transactionAttributes"> <ports> <propra key = "*"> propagation_required </prop> </props> </propriedade> </beans>
O segundo método: todos os grãos compartilham uma classe base de proxy
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" 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-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <bean id="sessionFactory" > <property name="configLocation" value="classpath:hibernate.cfg.xml" /> <property name = "ConfigurationClass" value = "org.hibernate.cfg.annotationConfiguration" /> < /bean> <!-Definir Gerenciador de transações (transação declarada)-> <bean id = "transactionManager"> <names = "sessionFactory" Ref = "Sessptória" /> < /reean> <breane Configurar Transaction Manager-> <Propriedade name = "transactionManager" ref = "transactionManager"/> <!-Configurar Propriedades da transação-> <propriedade name = "transactionAttributes"> <ports> <propra key = "*"> propagation_required </propps> </repers> </--"> <-"> name = "sessionFactory" ref = "sessionFactory"/> </bean> <bean id = "userdao" parent = "transactionbase"> <propriedade name = "target" ref = "userdatarget"/> </ Bean> </sheans>
A terceira maneira: use um interceptador
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" 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-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <bean id="sessionFactory" > <property name="configLocation" value="classpath:hibernate.cfg.xml" /> <property name = "ConfigurationClass" value = "org.hibernate.cfg.annotationConfiguration" /> < /bean> <!-Definir Gerenciador de transações (transação declarada)-> <bean id = "transactionManager"> <Nome da propriedade "" Ref = "Sessptory" /> < /</anager "> <rienger"> <names = " ref="transactionManager" /> <!-- Configure transaction properties --> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </props> </property> </bean> <bean> <property name="beanNames"> <list> <value>*Dao</value> </list> </property> <property name = "InterceptorNames"> <List> <Value> transactionIntercept </value> </list> </property> </bean> <!-configure Dao-> <bean id = "userdao"> <nome da propriedade = "sessionFactory" ref = "sessionFactory"/> </Bean> </beans>
O quarto método: Interceptor configurado usando tag TX
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 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 http://www.springframework.org/schema/beans/spring-bans-2.xsd http://wwwem http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <Contexto: AnnoTation-Config /> <Contexto: Componente-Scan Base-Package = "com.bluesky" /> <bean id = "sessionFactory"> <Propriedade name = "configLocation" value = "Classathpath: hibernate.cfg.xml" /> <names = "configuration" value = "ou" ourg.innate.InBG.xml " /> <names =" Configuration "(" ou "ourg.innate.InBG.xml" /> <names = "Configuration" "" ou "ourg.inning.InBG.Ilml" /> <names = "configuration" "ou" ou "ou" ou " Definir o gerenciador de transações (transação declarada)-> <bean id = "transactionManager"> <propriedade name = "sessionFactory" ref = "sessionFactory" /> < /bean> <tx: conselhos id = "txadvice": transação-manager = "transação </tx: conselhos> <aop: config> <aop: Pointcut id = "interceptorPointcuts" Expression = "Execution (*com.bluesky.spring.dao. O quinto método: anotação completa
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 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 http://www.springframework.org/schema/beans/spring-bans-2.xsd http://wwwem http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <Contexto: anotação-config /> <Contexto: component-scan Base-Package = "com.bluesky" /> <tx: transação acionada por anotação-manager = "transactionManager" /> <bean id = "sessionFactory"> <nome da propriedade "configLocation" = "ClassPath: hibernation.cfg.xg.xml" configlocation "=" ClassPath: hibernation.cfg.xg.xg.xl " value = "org.hibernate.cfg.annotationConfiguration"/> </bean> <!-Definir o gerenciador de transações (transação declarativa)-> <bean id = "transactionManager"> <nome da propriedade = "sessionFactory" ref = "sessionFactory"/> </Bean> </beans>
Neste momento, você precisa adicionar @transactional Anotation ao DAO, como segue:
pacote com.mktao.spring.dao; importar java.util.list; importar org.Hibernate.SessionFactory; importar org.springframework.beans.factory.annotation.autowired; importar org.springframework.orm.hibernate3.support.hibernatedaosupport; importar org.springframework.tereotype.component; importação com.bluesky.spring.Domain.User; @Transaction@component ("userdao") classe pública userdaoimpl estende o hibernateaosupport implementa Userdao {public list <suser> listusers () {return this.getSession (). Createequery ("do usuário"). List (); } ...}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.