2013-06-13 17 views
52

Psułem sobie głowę nad tym. Nie jestem pewien, czego mi brakuje. Jestem w stanie uzyskać @Value adnotacje do pracy w czystym java skonfigurowanej aplikacji sprężyny (bez www)Adnotacja wartości wiosennej 3.2 z czystą konfiguracją java nie działa, ale Environment.getProperty działa

@Configuration 
@PropertySource("classpath:app.properties") 
public class Config { 
    @Value("${my.prop}") 
    String name; 

    @Autowired 
    Environment env; 

    @Bean(name = "myBean", initMethod = "print") 
    public MyBean getMyBean(){ 
     MyBean myBean = new MyBean(); 
     myBean.setName(name); 
     System.out.println(env.getProperty("my.prop")); 
     return myBean; 
    } 
} 

Plik właściwości zawiera tylko my.prop=avalue Fasola jest następująca:

public class MyBean { 
    String name; 
    public void print() { 
     System.out.println("Name: " + name); 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

Zmienna środowiskowa prawidłowo drukuje wartość, @Value nie.
avalue
Name: ${my.prop}

Główna klasa tylko inicjuje kontekst.

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class); 

Jednak jeśli używam

@ImportResource("classpath:property-config.xml") 

z tym fragmencie

<context:property-placeholder location="app.properties" /> 

to działa dobrze. Oczywiście teraz środowisko powraca null.

Odpowiedz

95

Dodaj następującą deklarację fasoli w swojej klasie

@Bean 
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

Config Aby @Value adnotacji pracować PropertySourcesPlaceholderConfigurer powinny być zarejestrowane. Robi się to automatycznie przy użyciu <context:property-placeholder> w XML, ale powinno być zarejestrowane jako static @Bean podczas korzystania z @Configuration.

Zobacz dokumentację i niniejszy wiosenny schemat Jira issue.

+2

To działało świetnie! W doc docConfiguration brakuje tego. Prowadząc do tego całego zamieszania – Abe

+10

+1 - Żenująco, zawsze zapominam o tym przy rozpoczynaniu nowego projektu i za każdym razem znajduję tę odpowiedź. – Bukes

+0

Zarejestrowanie fasoli jako "statycznej" jest dla mnie kluczem. Dzięki. – Arpit

Powiązane problemy