beanfactory和factorybean的区别是什么

本文探讨了beanfactory作为bean容器的基本功能,与factorybean接口的特性对比,强调了后者如何通过getObject()方法返回自定义对象。了解两者在Spring框架中的实际应用和选择要点。

beanfactory与factorybean两者之间其实并无很大联系,只是因为两个名称接近,所以经常被用来比较。

beanfactory

beanfactory其实就是bean的容器,也就是用来管理bean对象的。很多容器都实现了它。

factorybean

factorybean是一个接口,如果一个类实现了这个接口,那么如果直接使用getBean(beanName)方式,得到的结果并不是这个实现类对象,而是实现类里面getObject()返回的对象,如果想要结果是这个实现类,则需使用getBean(&beanName)。

在 Spring 框架中,**BeanFactory** **FactoryBean** 是两个不同的概念,虽然它们的名字相似,但用途作用完全不同。 --- ### 1. BeanFactory **BeanFactory** 是 Spring 容器的基础接口,是 Spring IoC 容器的核心之一。它负责管理 Bean 的创建、配置管理。`BeanFactory` 是一个工厂模式的实现,用于根据配置创建管理 Bean。 - **作用**:负责加载 Bean 定义、创建 Bean 实例、管理 Bean 的生命周期。 - **常用实现类**:`DefaultListableBeanFactory`、`XmlBeanFactory`(已过时)、`ApplicationContext` 也基于 `BeanFactory` 实现。 - **特点**: - 延迟加载:Bean 在第一次被使用时才会被创建。 - 提供基础的依赖注入功能。 示例: ```java BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); MyBean myBean = (MyBean) factory.getBean("myBean"); ``` --- ### 2. FactoryBean **FactoryBean** 是一个特殊的 Bean,它本身是一个接口,用于创建其他 Bean 的实例。也就是说,`FactoryBean` 是一个工厂 Bean,它不是普通的 Bean,而是用来产生其他 Bean 实例的工厂。 - **作用**:自定义复杂对象的创建逻辑。 - **常用方法**: - `T getObject()`:返回由该工厂创建的对象实例。 - `Class<?> getObjectType()`:返回创建对象的类型。 - `boolean isSingleton()`:指示创建的对象是否为单例。 示例: ```java public class MyFactoryBean implements FactoryBean<MyObject> { @Override public MyObject getObject() throws Exception { return new MyObject(); } @Override public Class<?> getObjectType() { return MyObject.class; } @Override public boolean isSingleton() { return true; } } ``` 在配置中使用: ```xml <bean id="myObject" class="com.example.MyFactoryBean"/> ``` 此时,通过 `getBean("myObject")` 获取的是 `MyObject` 实例,而不是 `MyFactoryBean` 实例。 --- ### 总结对比 | 对比项 | BeanFactory | FactoryBean | |----------------|--------------------------------------|-----------------------------------------| | 类型 | 接口(容器) | 接口(Bean) | | 目的 | 管理创建 Bean | 自身是 Bean,用于创建其他 Bean 实例 | | 使用场景 | Spring 容器底层接口 | 自定义复杂对象的创建逻辑 | | 获取 Bean 方式 | getBean() | 通过配置注册后自动调用 getObject() | ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值