介绍下Java Spring的核心接口,容器中Bean的实例化

时间:2021-11-03 04:33:15

Spring的核心接口

ApplicationContext接口

继承了BeanFactory并且提供了加载资源文件的方法

ApplicationContext其实就是一个容器,ApplicationContext的实例其实就是容器对象,这个容器对象在实例化过程中其实就是容器初始化的过程

下面这几个都是ApplicationContext接口的实现类

ClasspathXmlApplicationContext加载Classpath下的xml格式的配置文件,初始化这样的实例

FileSystemXmlApplicationContext加载文件路径下的xml文件

AnnotationConfigApplicationContext注解配置

SpringMVC: WebApplicationContext 这个还没有引入对应的依赖所以暂时看不到

介绍下Java Spring的核心接口,容器中Bean的实例化

BeanFactory接口

生产bean,生产全部bean,容器。ApplicationContext接口继承了BeanFactory接口

也就是说BeanFactory接口实际上提供了Bean获得组件 管理组件方法

介绍下Java Spring的核心接口,容器中Bean的实例化

 

Spring容器中Bean的实例化

Spring的核心就是控制反转,它要控制实例的生成(实例化)

实例化主要有以下几种方式

构造方法

无参构造方法

默认使用的就是无参构造方法,最常用的

先贴出来xml文件,其中如果有参构造方法把无参构造方法覆盖掉的话,就需要constructor-arg标签来告知,其中的name标签就是对应的有参构造方法的参数名,而无参构造方法想要给属性做赋值就只需要property子标签即可

介绍下Java Spring的核心接口,容器中Bean的实例化

有参构造方法

介绍下Java Spring的核心接口,容器中Bean的实例化

测试后我们发现

介绍下Java Spring的核心接口,容器中Bean的实例化

工厂

静态工厂

工厂里的生产方法是静态方法

介绍下Java Spring的核心接口,容器中Bean的实例化

注册组件

介绍下Java Spring的核心接口,容器中Bean的实例化

实例工厂

工厂里的生产方法不是静态方法

介绍下Java Spring的核心接口,容器中Bean的实例化

组件注册

我们需要额外注册组件,并且要告诉其工厂是谁 工厂要使用的方法是什么

介绍下Java Spring的核心接口,容器中Bean的实例化

测试类

介绍下Java Spring的核心接口,容器中Bean的实例化

介绍下Java Spring的核心接口,容器中Bean的实例化

这里我们发现虽然都是User 但他们不是同一个组件

注意:如果直接去取的话或发生异常

介绍下Java Spring的核心接口,容器中Bean的实例化

此时加个id再去取出就可以了,

介绍下Java Spring的核心接口,容器中Bean的实例化

方法二:可以使用Map方式,按照类型去取出User组件

介绍下Java Spring的核心接口,容器中Bean的实例化

 

静态工厂和实例工厂在整合一些已有的工具类的时候,工具类有一些静态方法返回某一些实例而后面要去使用这些实例,就需要使用静态工厂方法注册组件

FactoryBean→使用工厂方法

FactoryBean实际上是个接口,我们看下它的代码

getObject()就是生产方法,其实就是返回一个实例

介绍下Java Spring的核心接口,容器中Bean的实例化

使用UserFactoryBean的set方法去给User做一个赋值

介绍下Java Spring的核心接口,容器中Bean的实例化

介绍下Java Spring的核心接口,容器中Bean的实例化

注册组件

我们的目的是想要通过FactoryBean获取到一个User类型的组件

介绍下Java Spring的核心接口,容器中Bean的实例化

通过FactoryBean注册的组件类型:和getObject方法的返回值是相关的,简单来讲就是Spring再检查注册组件的时候会检查组件有没有实现FactoryBean接口如果有实现就会去找到里面的getObject方法,把getObject返回的实例注册为容器中的组件

面试题:

BeanFactory和FactoryBean区别

都可以注册组件

BeanFactory:生产的是全部组件

FactoryBean:注册的特定类型的组件

 

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/zzzyukun/article/details/120122059