Esta sección ha sido probado por especialistas para que tengas la seguridad de la veracidad de nuestra esta crónica.
Solución:
No puede usar @Value en static variables Tendrás que marcarlo como no static o echa un vistazo aquí a una forma de inyectar valores en static variables:
https://www.mkyong.com/spring/spring-inject-a-value-into-static-variables/
EDITAR: En caso de que el enlace se rompa en el futuro. Puedes hacer esto haciendo un no static setter para tu static variable:
@Component
public class MyComponent
private static String directory;
@Value("$filesystem.directory")
public void setDirectory(String value)
this.directory = value;
Sin embargo, la clase debe ser un bean de Spring o, de lo contrario, no se creará una instancia y Spring no podrá acceder al setter.
Pocas cosas para que verifiques aparte de la respuesta de @Plog.
static
las variables no se pueden inyectar con valor. Verifique la respuesta de @Plog.
- Asegúrese de que la clase esté anotada con
@Component
o@Service
- El escaneo de componentes debe escanear el paquete adjunto para registrar los beans. Verifique su XML si la configuración está habilitada para xml.
- Compruebe si la ruta del archivo de propiedades es correcta o está en classpath.
Para aquellos que aún enfrentan el problema después de todas las sugerencias anteriores, asegúrese de no acceder a esa variable antes de que se haya construido el bean.
Eso es:
En lugar de hacer esto:
@Component
public MyBean
@Value("$properties.my-var")
private String myVar;
private String anotherVar = foo(myVar); // <-- myVar here is still null!!!
hacer esto:
@Component
public MyBean
@Value("$properties.my-var")
private String myVar;
private String anotherVar;
@PostConstruct
public void postConstruct()
anotherVar = foo(myVar); // <-- using myVar after the bean construction
Espero que esto ayude a alguien a evitar perder horas.
Sección de Reseñas y Valoraciones
No se te olvide dar recomendación a este tutorial si lograste el éxito.