想要尝试使用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 Athens和Brussels的DevTools,结果相同。
在删除@Lazy
后,@Repository
也出现了一些问题,我刚刚用@Component
取代了(仅在雅典试过)。
之后还有一个非常奇怪的问题:
java.lang.ClassCastException:project.specific.Product无法强制转换为project.specific.Product
显然,我不想删除@Lazy
并将@Repository
替换为@Component
,但也许我做错了什么?
答案 0 :(得分:0)
Spring Boot提供的重启技术使用两个 类加载器。不改变的类(例如,来自的类) 第三方jar)被加载到基类加载器中。那个类 你正在积极开发的是加载到重启类加载器。
这意味着,你的一些类是由不同的类加载器加载的(重启类加载器或基类加载器)。
如果类由不同的类加载器加载,它将识别为不同的类(bean)。
这就是为什么你的项目无法自动装配bean并且即使在相同的类之间也发生了ClassCastException。
并且解决方法是here
您可以选择Spring-devtools.properties明确加载类的类加载器。