目录

Spring的核心接口ApplicationContext接口 BeanFactory接口Spring容器中Bean的实例化构造方法无参构造方法有参构造方法工厂静态工厂实例工厂FactoryBean→使用工厂方法总结

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:注册的特定类型的组件

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注免费资源网的更多内容!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。