Spring框架的诞生,BeanFactory 快速入门,说说Spring中BeanFactory 接口和ApplicationContext接口的区别?
3)Bean创建的主要逻辑和功能都被封装在BeanFactory中,ApplicationContext不仅继承了BeanFactory,而且 ApplicationContext内部还维护着BeanFactory的引用,所以,ApplicationContext与BeanFactory既有继承关系,又 有融合关系。1)BeanFactory是Spring的早期接口,称为Spring的Bean工厂
一、Spring框架的诞生
Spring是一个开源的轻量级Java开发应用框架,可以简化企业应用开发。Spring解决了开发者在JavaEE开发中遇到的许多常见问题,提供了功能强大loC、AOP以及web MVC等功能。是当前企业中Java开发几乎不能缺少的框架之一,Spring的生态及其完善,不管是Spring哪个领域的解决方案都依附于Spring Framework基础框架的。
二、Spring框架的历史
- Jsp 默默扛下所有;
- MVC+三层架构分工明确,但开发成本及其高;
- EJB 重量级框架出现,走出一个困境,有进入另一个困境;
- Spring 春天来到,随之,SSH风生水起、称霸武林;
- Spring 稳住江湖大哥位置,SSM开始上位;
- Spring 本着“拿来主义”的思维快速发展,生态不断健全;
- SpringBoot 又一里程碑崛起,把“约定大于配置“思想玩儿的炉火纯青;
- SpringCloud 打包了微服务众多解决方案,应对互联网项目更加easy
三、Spring Framework技术栈图示
四、BeanFactory 快速入门
1)导入Spring的jar包或Maven坐标
2)定义UserService接口及其UserServiceImpl实现类
3)创建beans.xml配置文件,将UserServiceImpl的信息配置到该xml中
4)编写测试代码,创建BeanFactory,加载配置文件,获取UserService实例对象
五、BeanFactory快速入门
上面使用BeanFactory完成了IoC思想的实现,下面去实现以下DI依赖注入:
- 1)定义UserDao接口及其UserDaoImpl实现类;
- 2)修改UserServiceImpl代码,添加一个setUserDao(UserDao userDao)用于接收注入的对象;
- 3)修改beans.xml配置文件,在UserDaoImpl的<bean>中嵌入<property>配置注入;
- 4)修改测试代码,获得UserService时,setUserService方法执行了注入操作
(1)定义UserDao接口及其UserDaolmpl实现类
(2)修改UserServiceImpl代码,添加一个setUserDao(UserDao userDao)用于接收注入的对象
(3)定义UserDao接口及其UserDaoImpl实现类
4)编写测试代码,创建BeanFactory,加载配置文件,获取UserService实例对象
六、ApplicationContext快速入门
ApplicationContext称为Spring容器,内部封装了BeanFactory,比BeanFactory功能更丰富更强大,使用ApplicationContext进行开发,xml配置文件的名称习惯写成applicationContext.xml
七、BeanFactory与ApplicationContext的关系
1)BeanFactory是Spring的早期接口,称为Spring的Bean工厂,ApplicationContext是后期更高级接口,称之为 Spring 容器;
2)ApplicationContext在BeanFactory基础上对功能进行了扩展,例如:监听功能、国际化功能等。BeanFactory的 API更偏向底层,ApplicationContext的API大多数是对这些底层API的封装;
3)Bean创建的主要逻辑和功能都被封装在BeanFactory中,ApplicationContext不仅继承了BeanFactory,而且 ApplicationContext内部还维护着BeanFactory的引用,所以,ApplicationContext与BeanFactory既有继承关系,又 有融合关系。
4)Bean的初始化时机不同,原始BeanFactory是在首次调用getBean时才进行Bean的创建,而且ApplicationContext则 是配置文件加载,容器一创建就将Bean都实例化并初始化好
ApplicationContext除了继承了BeanFactory外,还继承了ApplicationEventPublisher(事件发布器)、 ResouresPatternResolver(资源解析器)、MessageSource(消息资源)等。但是ApplicationContext的核心功 能还是BeanFactory
BeanFactory与ApplicationContext的关系
applicationContext内部维护着beanFactory的引用,在学习过程中会查看beanFactory内部维护的属性,断点查 看如下图示内容的
验证BeanFactory和ApplicationContext对Bean的初始化时机,在UserDaoImpl的无参构造内打印一句话,验证 构造方法的执行时机
断点观察,BeanFactory方式时,当调用getBean方法时才会把需要的Bean实例创建,即延迟加载;而ApplicationContext是加载配置文件,容器创建时就将所有的Bean实例都创建好了,存储到一个单例池中,当调 用getBean时直接从单例池中获取Bean实例返回
八、BeanFactory的继承体系
BeanFactory是核心接口,项目运行过程中肯定有具体实现参与,这个具体实现就是DefaultListableBeanFactory ,而ApplicationContext内部维护的Beanfactory的实现类也是它
只在Spring基础环境下,即只导入spring-context坐标时,此时ApplicationContext的继承体系
只在Spring基础环境下,常用的三个ApplicationContext作用如下
如果Spring基础环境中加入了其他组件解决方案,如web层解决方案,即导入spring-web坐标,此时 ApplicationContext的继承体系
在Spring的web环境下,常用的两个ApplicationContext作用如
PS:web环境下的这两个ApplicationContext,在学习Spring集成web时在进行讲解
更多推荐
所有评论(0)