Ich habe einen Code:Spring, die Arbeit mit @Configuration und @Bean Anmerkungen
@Configuration
public class BeanSample {
@Bean(destroyMethod = "stop")
public SomeBean someBean() throws Exception {
return new SomeBean("somebean name1");
}
class SomeBean {
String name;
public SomeBean(String name) {
this.name = name;
}
public void stop() {
System.out.println("stop");
}
}
public static void main(String[] args) throws Exception {
BeanSample beanSample = new BeanSample();
SomeBean someBean1 = beanSample.someBean();
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] {"appContext.xml"});
SomeBean someBean2 = (SomeBean) appContext.getBean("someBean");
if (someBean1 == someBean2) System.out.println("OK");
}
}
Ich erwarte, wenn ich app starten, wird die BeanSample.getSomeBean(), dann wird SomeBean Gestartet von zur Verfügung stehen ' etwasBean '.
Bu jetzt habe ich einen Fehler: Keine Bean mit dem Namen ‚someBean‘ definiert ist
Eigentlich verstehe ich Punkt nicht die app-Kontext sollte ich meine Bohnen abholen verwenden?
Über @Configuration:
Irgendwelche Gründe, warum sollte ich @Configuration Anmerkung hier verwenden? (Mit diesem, meine IDE hebt meine Klassen, wie es Frühling bezogene waren dann, so sollte es Sinn machen)
- OK: nachdem ich eine Antwort bekam mein Code wie folgt aussieht:
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext(BeanSample.class);
SomeBean someBean2 = (SomeBean) appContext.getBean("someBean");
if (someBean2 != null) System.out.println("OK");
}
Ok, ich habe meine Frage dann geändert. – ses
Und ich habe meine Antwort geändert. ;) – rolve
ok. Es klappt. Ich habe auch BeanSample verschoben - nicht um inner zu sein. Außerdem haben Sie den Standardkonstruktor für BeanSample bereitgestellt. Versuchen zu verstehen, warum ich brauche: @Configuration dann .. – ses