2011-08-01 12 views

Respuesta

9

El inyector de resorte señala en el campo estático (por defecto).

lo que tiene dos alternativas:

  • (el mejor) que el campo no estático
  • (lo feo corte) añadir una incubadora estática ninguna que escribe en el campo estático, y añadir la @Value anotación al colocador.

+0

¿Puedo acceder al valor de las propiedades desde la función estática de forma no primaveral? –

+0

@Sangdol: a través del contexto de la aplicación: http://sujitpal.blogspot.com/2007/03/accessing-spring-beans-from-legacy-code.html – Ralph

2

Para impiden alguna vez de repetir las inyecciones de la mismo valor que hace un campo no estático en una clase que se crea una instancia muy a menudo, prefiero crear una simple ConfigUtil de Singleton como una solución alternativa:

package de.agitos.app.util; 

import org.springframework.beans.factory.annotation.Configurable; 
import org.springframework.beans.factory.annotation.Value; 

/** 
* Helper class to get injected configuration values from static methods 
* 
* @author Florian Sager 
* 
*/ 

@Configurable 
public class ConfigUtil { 

    private static ConfigUtil instance = new ConfigUtil(); 

    public static ConfigUtil getInstance() { 
     return instance; 
    } 

    private @Value("${my.value1}") Integer value1; 

    public Integer getValue1() { 
     return value1; 
    } 
} 

Dentro de la clase I trató de inyectar el primer valor como un entero estática:

private static Integer value1 = ConfigUtil.getInstance().getValue1(); 
+0

Intenté esto y no funciona (por supuesto, porque construyes el 'ConfigUtil' usando el operador' new'. – membersound

2

Usar este sencillo truco para conseguir lo que quiere (mucho mejor que tener el valor inyectado en los emisores no estáticos y escrito para un campo estático - como se sugiere en la respuesta aceptada):

@Service 
public class ConfigUtil { 
    public static ConfigUtil INSTANCE; 

    @Value("${some.value}) 
    private String value; 

    @PostConstruct 
    public void init() { 
     INSTANCE = this;   
    } 

    public String getValue() { 
     return value; 
    } 
} 

uso como:

ConfigUtil.INSTANCE.getValue();

Cuestiones relacionadas