likes
comments
collection
share

【java开发Spring篇】之理解Spring容器、BeanFactory和ApplicationContext

作者站长头像
站长
· 阅读数 15

前言:java后台开发中Spring是个绕不去的坎,此文章仅代表鄙人的总结和理解,如有错漏,欢迎指正...

一、spring容器理解

Spring容器可以理解为生产对象(OBJECT)的地方,在这里容器不只是帮我们创建了对象那么简单,它负责了对象的整个生命周期--创建、装配、销毁。而这里对象的创建管理的控制权都交给了Spring容器,所以这是一种控制权的反转,称为IOC容器,而这里IOC容器不只是Spring才有,很多框架也都有该技术。

二、BeanFactory和ApplicationContext之间的关系

Spring的两大核心接口:BeanFactoryApplicationContext

1)ApplicationContext是BeanFactory的子接口,最主要的方法就是getBean(String beanName)。

2)BeanFactory,直译Bean工厂(com.springframework.beans.factory.BeanFactory),我们一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文。

Spring的核心是容器,而容器并不唯一大概分为两种类型 (BeanFactory和ApplicationContext) : 一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能; 一种就是继承了BeanFactory后派生而来的ApplicationContext(应用上下文),它能提供更多企业级的服务,例如解析配置文本信息等等,这也是ApplicationContext实例对象最常见的应用场景。

总结:BeanFactory是Sping的心脏,那么ApplicationContext就是完整的身躯了。

除了提供BeanFactory所支持的所有功能外ApplicationContext还有以下额外的功能:

1、默认初始化所有的Singleton,也可以通过配置取消预初始化。  
2、继承MessageSource,因此支持国际化。  
3、资源访问,比如访问URL和文件。  
4、事件机制。  
5、同时加载多个配置文件。  
6、以声明式方式启动并创建Spring容器。  

注意: 由于ApplicationContext会预先初始化所有的Singleton Bean,于是在系统创建前期会有较大的系统开销,但一旦ApplicationContext初始化完成,程序后面获取Singleton Bean实例时候将有较好的性能。也可以为bean设置lazy-init属性为true,即Spring容器将不会预先初始化该bean。

三、Spring装配bean的三种方式

注意:装配和注入是不同的,这里的装配是把bean放到IOC容器中,就是扫描各种bean。

1、在XMl中进行显示配置,通过xml文件将配置加载到IOC容器中

2、在Java中进行显示配置,通过java注解的方式,@Configuration和@Bean将配置加载到IOC容器

3、隐式的bean发现机制和自动装配,@Configuration、@Component、@ComponentScan(Spring会自动发现应用上下文中所创建的bean。)

四、Spring三种注入方式

Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:(构造方法注入、setter注入、注解注入)

1、构造方法注入: 在spring的xml配置文件中配置所需要注入的参数。

【java开发Spring篇】之理解Spring容器、BeanFactory和ApplicationContext 【java开发Spring篇】之理解Spring容器、BeanFactory和ApplicationContext

2、setter注入:

【java开发Spring篇】之理解Spring容器、BeanFactory和ApplicationContext 【java开发Spring篇】之理解Spring容器、BeanFactory和ApplicationContext

3、基于注解的注入: 使用@autowired即可

五、spring常用注解

@Component :标准一个普通的spring Bean类。 
@Repository:标注一个DAO组件类。 
@Service:标注一个业务逻辑组件类。 
@Controller:标注一个控制器组件类。

参考博客: 理解Spring容器、BeanFactory和ApplicationContext


结语:以往都是看别人的博客进行学习技术,其中不乏有精华博客也有吊儿郎当的CV大法文章,所以决定将自己所学所用所整理的知识分享给大家,主要还是想为了后浪们少走些弯路,多些正能量的博客,如有错漏,欢迎指正,仅希望大家能在我的博客中学到知识,解决到问题,那么就足够了。谢谢大家!(转载请注明原文出处)

转载自:https://juejin.cn/post/6844904184098062350
评论
请登录