交易注释错误

时间:2016-09-14 05:29:17

标签: java spring-boot dependency-injection

当我把" @Transactional(readOnly=false)"我的Service类中的注释我收到以下错误

说明

  

豆子学生服务'无法注入   ' com.student.service.StudentServiceImpl'因为它是一个JDK动态   实现的代理:com.student.service.StudentService

示例代码:

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

}

public interface StudentService {

}

动作:

  

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

     

使用退出代码1完成处理

造成这种情况的原因是什么?

4 个答案:

答案 0 :(得分:16)

在spring boot项目中,尝试添加:

spring.aop.proxy-target-class=true

到你的application.properties

@EnableAspectJAutoProxy(proxyTargetClass = true)

到春季启动入口点。

答案 1 :(得分:14)

正如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 :(得分:0)

在您的应用程序类文件中添加以下内容:

@SpringBootApplication
@EnableCaching(proxyTargetClass = true)

答案 3 :(得分:0)

我遇到了类似的问题,并以this的方式解决了