programing

트랜잭션 주석 오류

bestprogram 2023. 7. 21. 21:48

트랜잭션 주석 오류

내가 "를 넣을 때.@Transactional(readOnly=false)내 서비스 클래스의 주석 다음 오류가 발생합니다.

설명:

빈 '학생 서비스'를 '로 주입할 수 없습니다.com.student.service.StudentServiceImplcom.student.service를 구현하는 JDK 동적 프록시이기 때문입니다.학생 서비스

샘플 코드:

@Service("studentService")
@Transactional(readOnly=false)
public class StudentServiceImpl implements StudentService {

}

public interface StudentService {

}

작업:

빈을 인터페이스 중 하나로 주입하거나 설정을 통해 CGLib 기반 프록시 사용을 강제하는 것을 고려합니다.proxyTargetClass=true@EnableAsync및/또는@EnableCaching.

프로세스가 종료 코드 1로 종료되었습니다.

무엇이 원인입니까?

SO가 코멘트에서 이미 언급했듯이, 인터페이스 대신 구현 클래스를 주입/자동 배선하려고 할 때 오류가 발생합니다.

빈 'studentService'를 'com.student.service'로 주입할 수 없습니다.com.student.service를 구현하는 JDK 동적 프록시이므로 'StudentServiceImpl'입니다.학생 서비스

SO가 게시한 설정에서

public class StudentServiceImpl implements StudentService {
}

public interface StudentService {
}

아래와 같이 인터페이스를 자동 배선하면 오류가 발생하지 않습니다.

@Autowired //or @Inject
StudentService studentService;

스프링 부트 프로젝트에서 다음을 추가합니다.

spring.aop.proxy-target-class=true

application.properties로 이동합니다.

OR

@EnableAspectJAutoProxy(proxyTargetClass = true)

스프링 부트 진입점으로 이동합니다.

응용 프로그램 클래스 파일에 다음을 추가합니다.

@SpringBootApplication
@EnableCaching(proxyTargetClass = true)

저도 비슷한 문제가 있었고 이런 으로 해결했습니다.

언급URL : https://stackoverflow.com/questions/39483059/transactional-annotation-error