Spring Boot DevTools初始化错误

时间:2017-03-13 15:25:58

标签: spring spring-boot

想要尝试使用Spring Boot DevTools(用于热重新加载的库),但在将其包含在我们的项目中后遇到了一些问题。 @Lazy字段的bean正在筹集BeanCreationException

  

使用名称' project.specific.Bean'创建bean时出错:注入自动连接的依赖项失败;嵌套异常是org.springframework.aop.framework.AopConfigException:无法生成类[class project.specific.Factory]的CGLIB子类:此问题的常见原因包括使用final类或不可见类;嵌套异常是org.springframework.cglib.core.CodeGenerationException:java.lang.reflect.InvocationTargetException - > null

project.specific.Bean 看起来像这样

@Component
public class Bean ... {
    ...
    @Autowired
    @Lazy
    private Factory factory;
    ...
}

我尝试使用Spring Boot AthensBrussels的DevTools,结果相同。

在删除@Lazy后,@Repository也出现了一些问题,我刚刚用@Component取代了(仅在雅典试过)。

之后还有一个非常奇怪的问题:

  

java.lang.ClassCastException:project.specific.Product无法强制转换为project.specific.Product

显然,我不想删除@Lazy并将@Repository替换为@Component,但也许我做错了什么?

1 个答案:

答案 0 :(得分:0)

也许是由spring dev工具重启类加载器引起的 请参阅Automatic restart

的文件
  

Spring Boot提供的重启技术使用两个   类加载器。不改变的类(例如,来自的类)   第三方jar)被加载到基类加载器中。那个类   你正在积极开发的是加载到重启类加载器。

这意味着,你的一些类是由不同的类加载器加载的(重启类加载器或基类加载器)。
如果类由不同的类加载器加载,它将识别为不同的类(bean)。

这就是为什么你的项目无法自动装配bean并且即使在相同的类之间也发生了ClassCastException。

并且解决方法是here

您可以选择Spring-devtools.properties明确加载类的类加载器。