2012-01-24 8 views
1

休止状態とトランザクションでテストするためにSpringを設定しようとしました。 @TransactionalトランザクションでマークされているアプリコンテキストからBeanを取得することは傍受されません。私が設定で欠場できるものは?なぜSpringはトランザクションを傍受しないのですか?

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> 
    <property name="dataSource" ref="dataSource"></property> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

<import resource="spring-dao.xml"/> 

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


<bean id="userService" class="com.test.service.UserServiceimpl"> 
    <property name="userDao" ref="userDao"/> 
</bean> 

public interface UserService { 

public abstract User loadUserById(long userId); 

@Transactional 
public abstract void doSomething(); 

}

public class UserServiceimpl implements UserService { 
@Override 
public void doSomething() { 
    User user = loadUserById(1); 
    user.fillUpMoney(999); 
    userDao.update(user); 
    throw new RuntimeException("Shpould be rollback"); 
} 
+0

これは例外の原因ですが、春はないインターフェイスメソッドで、実装メソッドに@Transactionalを入れてお勧めしますことをわかりません。 –

+0

関連:http://stackoverflow.com/q/4745798/342852(クラスはインターフェイスから注釈を継承しません) –

+0

私はそれがプロキシの実装に依存していることを覚えています。とにかく、クラスメソッドの春を注釈することは、トランザクションを傍受しません... – whatswrong

答えて

3

具体的な実装に注釈を付け、トランザクションとして抽象メソッドに注釈を付けないでください。

関連する問題