Весенние аннотации не работают - PullRequest
2 голосов
/ 07 января 2010

Я опубликовал это на весенних форумах, извините за xpost.

Я новичок в весне. Я работаю над существующим проектом, который использует Spring 1.2.8 (старый, я знаю) и Java 1.5, поэтому аннотации должны работать.

Я пытаюсь использовать аннотацию @Transactional для конкретного класса, следуя документам по адресу: http://static.springsource.org/spring/docs/1.2.8/reference/transaction.html#d0e6062

Итак, у меня есть что-то вроде этого:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 <property name="dataSource" ref="DataSource"/>
</bean>

<bean id="MyDAO"
  class="com.company.package.dao.spring.MyDAOImpl">
  <property name="dataSource" ref="DataSource" />
</bean>

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

<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
  <property name="transactionInterceptor" ref="txInterceptor"/>
</bean>

<bean id="txInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager" ref="transactionManager"/>
  <property name="transactionAttributeSource">
    <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
  </property>
</bean>

и я комментирую свой класс:

@Transactional(propagation = Propagation.REQUIRED)
public class MyDAOImpl extends JdbcDaoSupport implements MyDAO{
...
}

Когда я запускаю его, я вижу в своих журналах отладки, что spring находит все классы: Код:

01-07-10 12:10:45 DEBUG [DefaultXmlBeanDefinitionParser] Neither XML 'id' nor 'name' specified - using generated bean name [org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator]
01-07-10 12:10:45 DEBUG [DefaultXmlBeanDefinitionParser] Neither XML 'id' nor 'name' specified - using generated bean name [org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor]
01-07-10 12:10:45 DEBUG [DefaultXmlBeanDefinitionParser] Neither XML 'id' nor 'name' specified - using generated bean name [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#329f3d]

но после этого нет упоминаний об аннотациях или транзакциях. Я даже не знаю, должны ли они быть. Я проверяю в моем журнале mysql, что запросы не выполняются транзакционно.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 10 января 2010

Одна вещь, которую я часто упускаю, заключается в том, что прокси-сервер может перехватывать вызовы, только если они сделаны из вне самого класса: если у вас есть один метод, вызывающий транзакционный метод в том же классе, быть завернутым прокси. Но именно тогда аннотируются отдельные методы, а не весь класс, так что это, вероятно, не то, что вызывает вашу проблему.

1 голос
/ 12 января 2010

Игнорировать строки DEBUG (они просто говорят, что вы не указали идентификатор или имя, у вас просто есть bean class = "")

Вы поставили линию,

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

Вам также нужно добавить schemaLocation вверху что-то вроде

<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:tx="http://www.springframework.org/schema/tx"
        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.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
</beans>

В противном случае аннотации не обрабатываются:)

...