前言
本文阅读需要约5分钟,从一个普遍的错误到分析BeanFactory和ApplicationContex的异同
一、几乎所有人都犯过的错误
相信几乎所有Spring初学者都犯过一个错误(包括笔者在内),在编写Controller类或者Service类时忘记写
@Controller或@Service时,tomcat启动必定会报错。
这时一顿操作:错误信息拷贝,面向百度或csdn编程,恍然大悟,原来自己忘记加这俩注解了。
可,这是为什么?为什么不加这两个注解tomcat启动就会报错呢?
且看文章娓娓道来......
二、解答
这两者都可作为IOC容器管理对象的生命周期,请看代码:
1.BeanFactory
// 加载xml配置文件
BeanFactory context = new ClassPathXmlApplicationContext("bean1.xml");
// 获取配置的对象
User user = context.getBean("user", User.class);
2.ApplicationContext
// 加载xml配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
// 获取配置创建的对象
User user = context.getBean("user", User.class);
之所以会出现tomcat启动报错的原因就在于:
第一步时:BeanFactoy是需要用到时才会去加载对象,而ApplicationContext会提前加载好对象(有点类似懒汉饿汉)。
我们在做WEB时使用ApplicationContext提请加载好资源,那么响应速度便会提高。
所以如果忘记写@Controller或者@Service,tomcat启动时ApplicationContext找不到类,肯定就报错了
3.关系区别
可以看到BeanFactory是Application的鸡肋(基类),那么ApplicationContext功能比BeanFactory更多更强大
BeanFactoy更偏向于Spring内部使用不推荐开发人员使用,ApplicationContext更适合开发人员使用
不忘初心,技术改变世界