public class Main {
public static void main(String[] args) {
/* ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");*/
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(config.class);
applicationContext.refresh();
System.out.println(applicationContext.getBean("user"));
}
}
报错
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
/* AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(config.class);*/
applicationContext.refresh();
System.out.println(applicationContext.getBean("user"));
}
}
很容易看出,前者是不可刷新的,后者是可刷新的,为什么?
因为所继承的东西不一样,所以产生差异!!
看看refresh()方法
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
/* AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(config.class);*/
applicationContext.refresh();
System.out.println(applicationContext.getBean("user"));
System.out.println(applicationContext.getBean("user"));
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
/* AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(config.class);*/
System.out.println(applicationContext.getBean("user"));
applicationContext.refresh();
System.out.println(applicationContext.getBean("user"));
发现refresh()放在中间,取出来的对象就变了
来波总结:
当你refresh的时候,原先注册的bean就被销毁了,重新进行加载配置文件创建bean的操作。
我们拿个案例来分析一下:
此时修改编译路径下的spring.xml
改前
改后:
继续走:
验证了上面的总结!!!