Creé un servicio de descanso simple usando Java y Springboot. aquí está mi código de capa de servicio
@Service class MyService { private final TestService service; @Autowired public MyService(final TestService service) { this.service = service; } // here is the issue private final Predicate<User> userPredicate = (user) -> this.service.isValidUser(user); }
En la línea anterior, es posible que el ide que se queja del servicio variable no se inicialice y no puedo usarlo en la implementación del predicado. Intenté eliminar el final del servicio, eso funciona, pero no quiero eliminar el final de la declaración TestService.
¿Alguien tiene alguna solución?
El orden de ejecución es: primero, todas las expresiones de inicialización se resuelven en orden léxico (de arriba a abajo en el archivo), luego se ejecuta el constructor.
En otras palabras, esa línea userPredicate =
se ejecuta antes que this.service = service;
línea. Está condenado al fracaso y el compilador lo sabe, por lo que se negará a compilar este código.
La solución es trivial: mueva esa inicialización de userPredicate
al constructor:
private final TestService service; private final Predicate<User> userPredicate; @AutoWired public MyService(TestService service) { this.service = service; this.userPredicate = user -> service.isValidUser(user); }
Por lo que vale, si no necesita el service
para nada más que hacer ese userPredicate, también podría deshacerse del campo de service
por completo.