[SPRING] @Autowired와 함께 @Transaction 주석 사용 - 봄
SPRING@Autowired와 함께 @Transaction 주석 사용 - 봄
글쎄, 난 클래스 @Service 주석 및 일부 이상한 occurrs : 일부 메서드는 내가 Tomcat 서버를 시작할 수 없습니다 @ 주석을 넣어 @ 트랜잭션, 나는 오류가 : "autowired 수 없습니다 ..."다른 클래스에서 때 내 @Autowired를 사용하십시오. 그러나 @Transaction을 제거하면 정상적으로 작동합니다.
내 수업 헤더 :
@Service(value = "caixaBO")
public class CaixaBOImpl extends BasicBOImpl {
그리고 내 메서드 서명은 다음과 같습니다.
@Transactional(propagation = Propagation.REQUIRED)
public void movimentarCaixaPaciente(String descricao, double valor,
Paciente paciente) {
@Autowired CaixaBOImpl caixaBO를 사용할 때 주석이 @Transaction이므로 초기화 된 tomcat에서 오류가 발생합니다.
편집 1 :
1 - 나는 applicationContext.xml에 transactionManager를 가지고있다.
<!-- Configuracao do gerente de transacoes do Spring -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
2 - pom.xml에 CGLIB가 있습니다.
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2.2</version>
</dependency>
2 번 수정
내 스택 추적 :
Grave: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pedidoProteseBO': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private br.com.odontonew.financeiro.bo.CaixaBOImpl br.com.odontonew.odonto.bo.PedidoProteseBOImpl.caixaBO; nested exception is java.lang.IllegalArgumentException: Can not set br.com.odontonew.financeiro.bo.CaixaBOImpl field br.com.odontonew.odonto.bo.PedidoProteseBOImpl.caixaBO to com.sun.proxy.$Proxy36
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4701)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5204)
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5199)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private br.com.odontonew.financeiro.bo.CaixaBOImpl br.com.odontonew.odonto.bo.PedidoProteseBOImpl.caixaBO; nested exception is java.lang.IllegalArgumentException: Can not set br.com.odontonew.financeiro.bo.CaixaBOImpl field br.com.odontonew.odonto.bo.PedidoProteseBOImpl.caixaBO to com.sun.proxy.$Proxy36
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
... 20 more
Caused by: java.lang.IllegalArgumentException: Can not set br.com.odontonew.financeiro.bo.CaixaBOImpl field br.com.odontonew.odonto.bo.PedidoProteseBOImpl.caixaBO to com.sun.proxy.$Proxy36
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
at java.lang.reflect.Field.set(Field.java:741)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:504)
... 22 more
해결법
-
==============================
1.내가 생각할 수있는 두 가지 상황이 있습니다.
내가 생각할 수있는 두 가지 상황이 있습니다.
어쨌든 CGLIB 프록시가 있더라도 Spring은 JDK 프록시를 사용하고있는 것 같습니다. tx : 특수 효과 기반 선언을로 변경하십시오.
<tx:annotation-driven proxy-target-class="true" />
-
==============================
2.비슷한 문제가 발생하여 작동하는 것처럼 보이는 "해킹"을 사용했습니다. 클래스가 일부 인터페이스를 구현하게하십시오. 그것은 우리를 위해 일했습니다 - 그것이 당신에게도 효과가 있는지 알려주세요.
비슷한 문제가 발생하여 작동하는 것처럼 보이는 "해킹"을 사용했습니다. 클래스가 일부 인터페이스를 구현하게하십시오. 그것은 우리를 위해 일했습니다 - 그것이 당신에게도 효과가 있는지 알려주세요.
from https://stackoverflow.com/questions/19624354/using-transaction-annotation-with-autowired-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] GWT Dev 모드 + Spring 3.1 + Hibernate 4.0.1의 예외 (0) | 2019.01.16 |
---|---|
[SPRING] 스프링 웹 클라이언트를 멀티 스레드 환경에서 사용하는 올바른 방법 (0) | 2019.01.16 |
[SPRING] 봄 부팅 SSH Mysql? (0) | 2019.01.16 |
[SPRING] GWT 스프링 보안 통합 (PURE GWT, JSP 없음) (0) | 2019.01.16 |
[SPRING] 어떤 리턴 타입은 @RequestMapping 메소드의 spring mvc에서 사용합니까? (0) | 2019.01.16 |