Después de tanto luchar ya hallamos el arreglo de esta dificultad que muchos lectores de este sitio tienen. Si quieres aportar algún detalle puedes aportar tu información.
Solución:
La inyección de campo se realiza después de que se construyen los objetos, ya que obviamente el contenedor no puede establecer una propiedad de algo que no existe. El campo siempre estará sin configurar en el constructor.
Si desea imprimir el valor inyectado (o hacer una inicialización real :)), puede usar un método anotado con @PostConstruct
que se ejecutará después del proceso de inyección.
@Component
public class FtpServer
@Value("$ftp.port")
private int port;
@PostConstruct
public void init()
System.out.println(this.port);
Creo que el problema se debe al orden de ejecución de Spring:
-
En primer lugar, Spring llama al constructor para crear una instancia, algo como:
FtpServer ftpServer=new FtpServer(
); -
después de eso, por reflexión, el attribute está lleno:
code equivalent to ftpServer.setPort(
)
Entonces, durante la ejecución del constructor, el attribute sigue siendo 0 porque ese es el valor predeterminado de un int
.
Tienes la opción de añadir valor a nuestro contenido informacional participando con tu experiencia en las notas.