@Transactional и GenericApplicationContext не работают вместе

Я использую @Transactional и управление транзакциями по аннотации (tx:annotation-driven...). У меня проблема, когда я использую GenericApplicationContext для создания контекста приложения и получения из него некоторых компонентов:

GenericApplicationContext ctx = new GenericApplicationContext();

// Load beans definitions 
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
xmlReader.loadBeanDefinitions(new ClassPathResource(CONTEXT_PATH));

// Register the datasource 
ctx.getBeanFactory().registerSingleton(CONTEXT_DATASOURCE_BEAN_NAME, dataSource);

// Get the service
ServiceInterface service = (ServiceInterface) ctx.getBean("service");

У меня есть экземпляр ServiceInterface, но я хочу иметь прокси, который содержит информацию о транзакциях.

Не могли бы вы объяснить мне, что я пропустил?


person user1802311    schedule 06.11.2012    source источник
comment
Что именно не работает? Как настроить транзакции?   -  person axtavt    schedule 06.11.2012
comment
Я использую аннотацию @Transactional для классов обслуживания и dao и имею ‹tx:annotation-driven› в конфигурации xml. В коде, показанном выше, я вызываю службу bean и получаю ее, но экземпляр класса, но мне нужен прокси с TransactionInterceptor. Как я могу продолжить транзакционную аннотацию после создания контекста так, как я показал?   -  person user1802311    schedule 06.11.2012
comment
В основном моя проблема очень похожа на: forum.springsource.org/showth.. .-via-a-factory Я хочу иметь транзакции с bean-компонентами, созданными bean factory. Как продолжить аннотацию транзакции после получения bean-компонента из bean factory?   -  person user1802311    schedule 06.11.2012
comment
Привет, Stack Overflow — это сайт вопросов и ответов, а не форум. Вам не нужно кричать РЕШЕНО в заголовках или редактировать ответ в самом вопросе. Просто опубликуйте нормальный ответ — когда позволит время — и отметьте его как принятый. Он появится как решенный в списке и поиске. Я отменил ваше изменение.   -  person BalusC    schedule 06.11.2012


Ответы (1)


Необходимо вызвать ctx.refresh() перед ctx.getBean(). Затем будут вызваны BeanPostProcessors.

person user1802311    schedule 07.11.2012