весна связывание, то не с @транзакций
Я хочу использовать аннотацию @Transactional в методе save() пользовательского сервиса (конкретного класса) следующим образом:
@Service
public class UserService {
@Transactional
public Long save(User userCommand, BindingResult result) {
...
}
}
Я использую эту услугу в MyRealm by autowiring.
public class MyRealm extends AuthorizingRealm {
@Autowired
private UserService userService;
}
Однако он завершается со следующей ошибкой:
java.lang.IllegalArgumentException: Can not set n.r.c.s.user.UserService field n.r.c.s.realm.MyRealm.userService to com.sun.proxy.$Proxy48
Конечно, это работает, если я удаляю аннотацию @Transational.
Мои настройки диспетчера транзакций выглядят следующим образом:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
Пожалуйста, дайте мне знать, что не так с моим кодом?
Нужно ли мне настроить что-то вроде доверенность?
1 ответ:
Когда проксирование включено, вы должны использовать интерфейсы, а не реализации.
@Service public class UserService implements SomeInterface { @Transactional public Long save(User userCommand, BindingResult result) { ... } } public class MyRealm extends AuthorizingRealm { @Autowired private SomeInterface userService; }
Если вы не хотите этого делать, вы всегда можете проверить конфигурацию AOP. вы, вероятно, делаете прокси для прокси-сервера где-то.