Estoy tratando de inyectar un objeto Path a las propiedades. Sin embargo, parece que solo puedo inyectar una cadena a una propiedad. Así que intenté usar el siguiente código para iniciar las propiedades de una ruta, pero fallé. ¿Alguien podría sugerirme cómo puedo hacerlo?

@Service
public class FilesStorageServiceImpl implements FilesStorageService {

  @Value("${upload.path}")
  private String rootPath;

  private Path root = Path.get(this.rootPath)

  public void doSomething() {
    Files.copy(....)
  }
}

Cuando lo depuro, me muestra que la raíz es nula. Parece que la ruta raíz no está iniciada.

1
user1235004 20 ene. 2021 a las 16:38

1 respuesta

La mejor respuesta

Depende de cómo y cuándo ocurre la inicialización de las variables de servicio. Fácil reparación, inyección mediante incubadora:

@Service
public class FilesStorageServiceImpl implements FilesStorageService {

  private String rootPath;

  private Path root;

  @Value("${upload.path}")
  public setRootPath(String rootPath) {
    this.rootPath = rootPath;
    root = Path.get(this.rootPath)
  }

  public void doSomething() {
    Files.copy(....)
  }
}

Usando setter para inyección de valor, puede tener un mejor control sobre la inicialización de la variable root.

¿Inyectando todo el objeto? Probablemente no sea lo que desea, ya que no vale la pena el esfuerzo de averiguar cómo va a serializar, deserializar y luego inyectar ese objeto.

0
Branislav Lazic 20 ene. 2021 a las 13:57