1、
BeanFactory
BeanFactory定义了
IOC
容器的最基本形式,并提供了
IOC
容器应遵守的的最基本的接口,也就是
Spring IOC
所遵守的最底层和最基本的编程规范。在
Spring
代码中,
BeanFactory
只是个接口,并不是
IOC
容器的具体实现,但是
Spring
容器给出了很多种实现,如
DefaultListableBeanFactory
、
XmlBeanFactory
、
ApplicationContext
等,都是附加了某种功能的实现。
package org.springframework.beans.factory;
import org.springframework.beans.BeansException;
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException;
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
}
2、
FactoryBean
一般情况下,Spring
通过反射机制利用
<bean>
的
class
属性指定实现类实例化
Bean
,在某些情况下,实例化
Bean
过程比较复杂,如果按照传统的方式,则需要在
<bean>
中提供大量的配置信息。配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。
Spring
为此提供了一个
org.springframework.bean.factory.FactoryBean
的工厂类接口,用户可以通过实现该接口定制实例化
Bean
的逻辑。
FactoryBean接口对于
Spring
框架来说占用重要的地位,
Spring
自身就提供了
70
多个
FactoryBean
的实现。它们隐藏了实例化一些复杂
Bean
的细节,给上层应用带来了便利。从
Spring 3.0
开始,
FactoryBean
开始支持泛型,即接口声明改为
FactoryBean<T>
的形式:
package org.springframework.beans.factory;
public interface FactoryBean<T> {
T getObject() throws Exception;
Class<?> getObjectType();
boolean isSingleton();
}
在该接口中还定义了以下3
个方法:
T getObject():返回由
FactoryBean
创建的
Bean
实例,如果
isSingleton()
返回
true
,则该实例会放到
Spring
容器中单实例缓存池中;
boolean isSingleton():返回由
FactoryBean
创建的
Bean
实例的作用域是
singleton
还是
prototype
;
Class<T> getObjectType():返回
FactoryBean
创建的
Bean
类型。
当配置文件中<bean>
的
class
属性配置的实现类是
FactoryBean
时,通过
getBean()
方法返回的不是
FactoryBean
本身,而是
FactoryBean#getObject()
方法所返回的对象,相当于
FactoryBean#getObject()
代理了
getBean()
方法。
例:如果使用传统方式配置下面Car
的
<bean>
时,
Car
的每个属性分别对应一个
<property>
元素标签。
package com.baobaotao.factorybean;
public class Car {
private int maxSpeed ;
private String brand ;
private double price ;
public int getMaxSpeed () {
return this . maxSpeed ;
}
public void setMaxSpeed ( int maxSpeed ) {
this . maxSpeed = maxSpeed;
}
public String getBrand () {
return this . brand ;
}
public void setBrand ( String brand ) {
this . brand = brand;
}
public double getPrice () {
return this . price ;
}
public void setPrice ( double price ) {
this . price = price;
}
}
如果用FactoryBean
的方式实现就灵活点,下例通过逗号分割符的方式一次性的为
Car
的所有属性指定配置值:
package com.baobaotao.factorybean;
import org.springframework.beans.factory.FactoryBean;
public class CarFactoryBean implements FactoryBean<Car> {
private String carInfo ;
public Car getObject () throws Exception {
Car car = new Car () ;
String [] infos = carInfo .split ( "," ) ;
car.setBrand ( infos [ 0 ]) ;
car.setMaxSpeed ( Integer. valueOf ( infos [ 1 ])) ;
car.setPrice ( Double. valueOf ( infos [ 2 ])) ;
return car;
}
public Class<Car> getObjectType () {
return Car. class ;
}
public boolean isSingleton () {
return false ;
}
public String getCarInfo () {
return this . carInfo ;
}
// 接受逗号分割符设置属性信息
public void setCarInfo ( String carInfo ) {
this . carInfo = carInfo;
}
}
有了这个CarFactoryBean
后,就可以在配置文件中使用下面这种自定义的配置方式配置
Car Bean
了:
<bean id="car" class="com.baobaotao.factorybean.CarFactoryBean"
P:carInfo="法拉利
,400,2000000"/>
当调用getBean("car")
时,
Spring
通过反射机制发现
CarFactoryBean
实现了
FactoryBean
的接口,这时
Spring
容器就调用接口方法
CarFactoryBean#getObject()
方法返回。如果希望获取
CarFactoryBean
的实例,则需要在使用
getBean(beanName)
方法时在
beanName
前显示的加上
"&"
前缀:如
getBean("&car");
3、
区别
BeanFactory是个
Factory
,也就是
IOC
容器或对象工厂,
FactoryBean
是个
Bean
。在
Spring
中,所有的
Bean
都是由
BeanFactory(
也就是
IOC
容器
)
来进行管理的。但对
FactoryBean
而言,这个
Bean
不是简单的
Bean
,而是一个能生产或者修饰对象生成的工厂
Bean,
它的实现与设计模式中的工厂模式和修饰器模式类似。
分享到:
相关推荐
简单了解Spring中BeanFactory与FactoryBean的...BeanFactory和FactoryBean都是Spring框架中的重要组件,它们提供了不同的功能和机制来管理和生成Bean。理解它们之间的区别对我们使用Spring框架开发应用程序非常重要。
Spring 中的 BeanFactory 和 FactoryBean BeanFactory 是 Spring 框架中的核心组件之一,负责管理 Bean 的生命周期,包括实例化、配置和注入对象之间的关系。它是 Spring IOC(控制反转)容器的核心组件,提供了...
Spring BeanFactory和FactoryBean的区别解析 Spring框架中,BeanFactory和FactoryBean是两个非常重要的概念,它们都是Spring IoC容器的核心组件。今天,我们将深入探讨这两个概念之间的区别和联系。 首先,让我们...
在Spring框架中,BeanFactory和FactoryBean是两个重要的接口,它们各自扮演着不同的角色,但都与Spring容器的管理和创建对象密切相关。 **BeanFactory接口**是Spring容器的基础,它是整个Spring IoC(Inversion of ...
在Spring框架中,BeanFactory和FactoryBean都是非常重要的概念,它们都是Spring IoC容器的组成部分。今天,我们将深入探讨这两个概念的讲解。 一、BeanFactory BeanFactory是Spring IOC容器的基本实现,是Spring...
BeanFactory和FactoryBean的区别在于,BeanFactory需要遵循完整的创建流程,而FactoryBean只需要调用getObject()方法来返回具体对象。 Spring源码流程图是了解Spring框架核心组件和Bean生命周期的关键。通过了解...
11,beanfactory和factorybean的区别? 12,用过的设计模式有哪些?介绍一下负责链模式。 算法题: 1,三个线程顺序打印十个数。 2,合并两个有序数组 反问:索引的隔离级别是什么? 面试过程中面试官会做详细记录...
### 知识点三:BeanFactory 和 FactoryBean 的区别 #### 1.3.1 BeanFactory 和 FactoryBean 的区别 ##### BeanFactory - 以 Factory 结尾,表示它是一个工厂类,用于管理 Bean。 - 提供基本的 Bean 创建与依赖...
在学习了书籍Spring5.0后,将自己的理解总结成了ppt,主要包含了IoC 和 DI,AOP,BeanFactory和FactoryBean,事务管理四个方面
5. **Spring框架**:Spring相关的面试题目可能会涵盖BeanFactory和FactoryBean的区别、Spring的IoC和AOP原理、Bean的生命周期管理、事务管理、SpringMVC的工作流程,以及Spring中采用的设计模式等。 6. **网络编程...
Spring框架中的BeanFactory和FactoryBean也使用了工厂模式,它们负责根据配置信息创建并管理Bean对象。 2. **代理模式**:代理模式为其他对象提供一种代理以控制对这个对象的访问。在Struts中,ActionProxy可以视为...
它提供了创建和管理Bean的基础架构,同时也包含了其他核心类和接口,比如BeanFactory和FactoryBean等。 - **Core组件的特点**:Core组件更像是一个工具箱,包含了大量实用类和接口,用于支持Bean的创建和配置过程。...
工厂模式 - BeanFactory 和 FactoryBean - **BeanFactory**:作为 Spring 的核心接口之一,BeanFactory 是简单工厂模式的一个具体应用。它通过提供`getBean(String name)`方法,允许开发者通过唯一标识符获取相应...
1. **依赖注入**:Spring框架的核心机制之一,如何通过BeanFactory和FactoryBean实现依赖注入。 2. **Spring IOC容器**:IOC容器的初始化过程,如Bean的创建、装配和销毁。 3. **ApplicationContext**:与...
BeanFactory和FactoryBean区别 Spring事务配置 SpringBoot面试题 Java相关 三大特性:封装、继承、多态 抽象类和接口区别 Object类下的方法 Collection类 反射 ...
- **BeanFactory和FactoryBean的区别**: - `BeanFactory`:Spring的核心容器接口。 - `FactoryBean`:一种特殊的bean,可以创建并返回其他bean。 ### 八、Bean的生命周期 - **初始化阶段**:Spring容器创建bean...
1. **BeanFactory和FactoryBean**:`BeanFactory`是Spring的核心接口,用于创建和管理bean实例;`FactoryBean`则是用于创建其他bean的工厂bean。 2. **Spring IOC的理解**:控制反转(Inversion of Control, IoC)是...
六、BeanFactory和FactoryBean的区别 BeanFactory是IOC底层容器,而FactoryBean是创建Bean的一种方式,帮助实现复杂的初始化逻辑。 七、BeanFactory和ObjectFactory的区别 ObjectFactory和BeanFactory均提供依赖...
FactoryBean和BeanFactory都是Spring框架中的核心概念,但是它们的作用不同。BeanFactory是一个工厂接口,提供了基本的IoC容器功能,而FactoryBean是一个工厂类,负责创建和管理对象实例。BeanFactory是FactoryBean...
Spring 框架中 FactoryBean 是一个非常重要的概念,它提供了一种创建和管理 Bean 的机制。在 Spring 中,FactoryBean 是一个特殊的 Bean,它可以创建其他 Bean,並提供了对这些 Bean 的管理。今天,我们将深入探讨 ...