lambda表达式阻止类从spring组件扫描

时间:2017-04-07 06:11:51

标签: java spring lambda functional-programming java-8

我们的应用程序使用@Component注释进行类测试。 这里使用了Lambda表达式。

    @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);
      }

    }

但是没有创建这个Test类bean。但是当评论此方法时,则会创建Test类bean。

使用Java 8 oracle和Eclipse Neon2。

建议是否需要进行任何更改以解决此问题。

  

编辑1:

     

发现类似问题: https://java.net/jira/browse/JAVASERVERFACES-3732

  

编辑2:

           

面临https://github.com/orfjackal/retrolambda/issues/121

的类似问题

P.S:

如果

() -> {
                           schedulerExecutorService.shutdown();                               
                        }

替换为私有内部类,这很好。

private class TerminalScheduledExecutor implements Runnable{
@Override
        public void run() {
            schedulerExecutorService.shutdown();
        }
}.

然而,在没有替换lambda函数的情况下期待解决方案。

2 个答案:

答案 0 :(得分:1)

您是否尝试更改spring框架的详细bean创建日志的日志记录级别?

在此提出建议: Question with no answers, but issue solved in the comments (or extended in chat)

答案 1 :(得分:0)

最后找到了解决方案:

问题是

  

org.reflections.Reflections

版本。将其升级为

  

0.9.9-RC2

问题已解决。

根据@OnurAktaş建议,启用调试并找到

  

无法扫描org.reflections.reflection中发生的文件错误。