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
.
To działało świetnie! W doc docConfiguration brakuje tego. Prowadząc do tego całego zamieszania – Abe
+1 - Żenująco, zawsze zapominam o tym przy rozpoczynaniu nowego projektu i za każdym razem znajduję tę odpowiedź. – Bukes
Zarejestrowanie fasoli jako "statycznej" jest dla mnie kluczem. Dzięki. – Arpit