Java lambda表达式阻止类进行spring组件扫描
我们的应用程序使用@Component注释进行类测试。 这里使用Lambda表达式Java lambda表达式阻止类进行spring组件扫描,java,spring,lambda,functional-programming,java-8,Java,Spring,Lambda,Functional Programming,Java 8,我们的应用程序使用@Component注释进行类测试。 这里使用Lambda表达式 @Component public class Test{ private ScheduledExecutorService schedulerExecutorService; private long timeoutForRollBack=180000; private long timeoutFailoverDelay=180000; publ
@Component
public class Test{
private ScheduledExecutorService schedulerExecutorService;
private long timeoutForRollBack=180000;
private long timeoutFailoverDelay=180000;
public static Test getInstance() {
if (INSTANCE == null) {
/*Actual instance will be created via reflection. using new for understanding */
INSTANCE = new Test();
}
return INSTANCE;
}
public void handleFailOver(){
schedulerExecutorService.scheduleWithFixedDelay(
() -> {
schedulerExecutorService.shutdown();
},
timeoutForRollBack, timeoutFailoverDelay, TimeUnit.MILLISECONDS);
}
}
但是这个测试类bean并没有被创建。但是当这个方法被注释时,测试类bean就被创建了
使用Java8Oracle和EclipseNeon2
建议是否需要任何更改来修复此问题
编辑1:
发现报告的类似问题: 编辑2:
面临的类似问题 附言: 如果 被私有的innerclass替换,这可以正常工作
private class TerminalScheduledExecutor implements Runnable{
@Override
public void run() {
schedulerExecutorService.shutdown();
}
}.
但是,我们期待在不替换lambda函数的情况下找到解决方案。最终找到了解决方案: 问题在于 org.reflections.reflections 版本。升级到 0.9.9-RC2 问题解决了 根据@OnurAktaş的建议,启用调试并发现 无法扫描org.reflections.reflection中发生的文件错误
您是否尝试更改spring框架的日志记录级别以获得详细的bean创建日志
根据此处的建议:而不是一个片段发布完整的类。@M.Deinum我提供了修改后的代码片段。无法发布完整的类。让我用更详细的内容编辑帖子。我们已经尝试过了,但无法重现您在spring 4.2.6中遇到的问题,您使用的是哪个版本?@shizhz我们使用的是4.1.1.release我建议您整理一下代码-不需要getInstance()方法,而且schedulerExecutorService似乎没有被注入,因此它将为空。
private class TerminalScheduledExecutor implements Runnable{
@Override
public void run() {
schedulerExecutorService.shutdown();
}
}.