我有一个代码:
@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");
}
}
我期待,一旦我启动应用程序,BeanSample.getSomeBean() 然后 SomeBean 将开始由“someBean”提供。
但是现在我有一个错误:没有定义名为“someBean”的bean
实际上,我不明白应该使用哪个应用程序上下文来拾取我的 bean?
关于@Configuration:
任何原因,为什么我应该在这里使用 @Configuration 注释?(有了这个,我的 IDE 突出显示了我的类,因为它当时与 Spring 相关,所以它应该是有意义的)
--好的:得到答案后,我的代码如下所示:
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");
}