事务注释错误

2022-09-02 23:21:43

当我在我的服务类中放置“”注释时,我收到以下错误@Transactional(readOnly=false)

描述:

Bean 'studentService' 不能作为 '' 注入,因为它是一个 JDK 动态代理,它实现:com.student.service.StudentServicecom.student.service.StudentServiceImpl

示例代码:

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

}

public interface StudentService {

}

行动:

考虑将 Bean 作为其接口之一注入,或者通过设置 和/或 来强制使用基于 CGLib 的代理。proxyTargetClass=true@EnableAsync@EnableCaching

进程已完成,退出代码为 1

这是什么原因造成的?


答案 1

正如 SO 在注释中已经提到的,当您尝试注入/自动连接实现类而不是接口时,会发生错误。

Bean 'studentService' 不能作为 'com.student.service.StudentServiceImpl' 注入,因为它是一个 JDK 动态代理,实现:com.student.service.StudentService

在 SO 发布的设置上,

public class StudentServiceImpl implements StudentService {
}

public interface StudentService {
}

如果您按如下方式自动连接界面,则不会收到错误:

@Autowired //or @Inject
StudentService studentService;

答案 2

在弹簧启动项目中,尝试添加:

spring.aop.proxy-target-class=true

到您的应用程序.属性

@EnableAspectJAutoProxy(proxyTargetClass = true)

到您的弹簧启动入口点。


推荐