当前位置:首页 > 通信资讯 > 正文

Spring的核心接口

ApplicationContext接口

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

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

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

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

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

AnnotationConfigApplicationContext注解配置

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

BeanFactory接口

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

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

Spring容器中Bean的实例化

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

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

构造方法

无参构造方法

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

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

有参构造方法

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

测试后我们发现

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

工厂

静态工厂

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

注册组件

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

实例工厂

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

组件注册

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

测试类

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

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

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

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

FactoryBean→使用工厂方法

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

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

注册组件

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

Spring 容器基本的接口是什么?(通过spring容器获取一个类的实例的spring容器接口的)

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

面试题:

BeanFactory和FactoryBean区别

都可以注册组件

BeanFactory:生产的是全部组件

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

总结

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

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

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。