FactoryBean接口定义了以下3个接口方法:
Object getObject():返回有FactoryBean创建的Bean实例,如果isSingleton()返回true,则该实例会放到Spring容器的单实例缓存池中。
boolean isSingleton():确定由FactoryBean创建Bean的作用域是singleton还是prototype.
Class getObjectType():返回FactoryBean创建Bean的类型。
当配置文件中 <bean>的class属性配置的实现类是FactoryBean时,通过getBean方法返回的不是FactoryBean本身,而是 FactoryBean#getObject()方法所返回的对象,相当于FactoryBean#getObject()代理了getBean()方 法。
我们在配置Car时,Car的每个属性分别对应一个<property>元素标签。假设我们嫌这种方式不苟简洁,而希望通过逗号分隔的方式一次性的为Car的所有属性制定配置值,那么我们可以通过编写一个FactroyBean来达到目的:
import org.springframework.beans.factory.FactoryBean;
public class CarFactoryBean implements FactoryBean{
private String carInfo;
public Stirng getCarInfo(){
return carInfo;
}
public void setCarInfo(String carInfo){
this.carInfo=carInfo;
}
public Object getObject()throws Exception{
Car car=new Car();
String[]infos = carInfo.split(",");
car.setBrand(infos[0]);
car.setMaxSpeed(Integer.aarseInt(infos[1]));
car.setPrice(Double.parseDouble(infos[2]));
return car;
}
public Class getObjectType(){
return Car.class;
}
public boolean isSingleton() {
return true;
}
}
有了这个CarFactoryBean后,我们就可以在配置文件中使用以下的配置方式定义Car Bean了:
<bean id="car" class="com.lxm.fb.carFactoryBean">
<property name="carInfo" value="红旗CA72,200,20000.00"/>
</bean>
当调用getBean("car")时,Spring通过反射机制发现CarFactoryBean实现了FactoryBean的接口,这时 Sping容器就调用接口方法CarFactoryBean#getObject()返回工厂类创建的对象。如果用户希望获取 CarFactoryBean的实例,则需要在使用getBean(beanName)方法时显式地在beanName前加上“&”前 缀:getBean("&cr").
相关推荐
Spring 中 FactoryBean 中的 getObject() 方法实例解析 Spring 框架中 FactoryBean 是一个非常重要的概念,它提供了一种创建和管理 Bean 的机制。在 Spring 中,FactoryBean 是一个特殊的 Bean,它可以创建其他 ...
在标题“spring的FactoryBean增强我们的目标对象.rar”中,提到的核心概念就是如何利用`FactoryBean`来增强目标对象,从而在方法调用时使用代理类而不是原始对象。 `FactoryBean`是Spring中用于对象创建的一种高级...
综上所述,"Spring中的FactoryBean.rar"文件所涵盖的内容可能涉及FactoryBean的接口定义、应用场景、使用方法以及如何自定义FactoryBean等方面。通过学习这部分内容,开发者能够更好地理解Spring IoC容器的工作原理...
Spring容器会调用`FactoryBean`的`getObject()`方法来获取实际的对象,而不是直接实例化`FactoryBean`本身。 下面我们将逐步分析`FactoryBean`的相关测试代码: 1. **配置文件(spring.xml)** 在Spring的XML配置...
在Spring配置中,当我们引用一个`FactoryBean`时,Spring会识别到这个特殊的Bean,并调用`FactoryBean`的方法来获取最终的实例。例如,有一个`Person`类,它需要一个`Car`对象。在XML配置中,我们不需要直接声明`Car...
简单了解Spring中BeanFactory与FactoryBean的区别 Spring框架中有两个非常关键的接口:BeanFactory和FactoryBean。虽然它们的名字相似,但它们的作用和实现机制却有很大的不同。 BeanFactory是Spring IoC容器的...
在上面的示例中,我们实现了FactoryBean接口,并提供了getObject()方法来生成User对象。这样,我们可以通过getBean(id)方法获取User对象的实例,而不是UserFactory的实例。 FactoryBean的实现可以带来很多便捷,...
当Spring容器遇到一个实现了`FactoryBean`接口的bean时,它不会直接调用`getBean()`方法来获取对象,而是调用`FactoryBean`的`getObject()`方法。这样,我们可以在`getObject()`方法中实现复杂的逻辑,如初始化、...
在 Spring 中,FactoryBean 是一个特殊的 Bean,它实现了 FactoryBean 接口,该接口提供了 getObject() 方法来返回实例化后的对象。当我们在配置文件中配置了 FactoryBean 时,getBean() 方法返回的对象实际上是 ...
当你在Spring配置文件中声明一个Bean,并指定它的类型为`FactoryBean`的实现类时,Spring不会直接调用无参构造函数来创建Bean,而是调用`FactoryBean`的方法来获取Bean实例。 首先,我们需要了解`FactoryBean`的...
在这个例子中,`UserServiceFactoryBean`实现了FactoryBean,当从Spring容器中请求`IUserService`类型的Bean时,实际上会通过`UserServiceFactoryBean`的`getObject()`方法返回一个`UserServiceImpl`实例。...
在上面的代码中,我们实现了 FactoryBean 接口的三个方法:getObject()、getObjectType() 和 isSingleton()。其中,getObject() 方法负责返回一个 Car 实例,getObjectType() 方法返回 Car 类型,而 isSingleton() ...
Spring中的BeanFactory与...总结:今天,我们探讨了Spring中的BeanFactory和FactoryBean这两个概念,了解了它们在Spring IOC容器中的角色和作用。希望本文的内容对大家的学习或者工作具有一定的参考学习价值。
Spring框架中,BeanFactory和FactoryBean是两个非常重要的概念,它们都是Spring IoC容器的核心组件。今天,我们将深入探讨这两个概念之间的区别和联系。 首先,让我们从BeanFactory开始。BeanFactory是IoC容器的...
在Spring配置文件中,当声明一个bean并将其类型设置为`FactoryBean`的实现类时,Spring不会直接实例化该bean,而是调用`FactoryBean`的方法来获取实际的业务对象。这种方式可以用来创建复杂或者需要特殊初始化过程的...
在Spring和MyBatis的整合过程中,通常有多种方法实现两者的无缝对接,以提高开发效率和代码的可维护性。下面将详细讲解这三种整合方法。 1. **使用MapperScannerConfigurer** `MapperScannerConfigurer` 是Spring...
当ApplicationContext试图获取一个被标记为FactoryBean的bean时,它会调用FactoryBean的getObject()方法来得到真正的bean实例。这种模式使得我们可以自定义bean的创建过程,甚至创建非Spring管理的bean。 Spring的...
`FactoryBean`的`getObject()`方法返回实际的对象。这种方式适用于更复杂的实例化场景,如创建JDBC数据源或线程池。例如: ```java public class MyFactoryBean implements FactoryBean<ExampleBean> { @Override...
`FactoryBean`是Spring I/O体系中的一个关键组件,尤其在处理复杂对象创建或者需要控制对象初始化过程时,它的作用尤为突出。下面将详细介绍`FactoryBean`的工作原理、使用场景以及如何在实际项目中应用。 ### `...
`FactoryBean`的`getObject()`方法负责返回一个由工厂生产的对象,而Spring容器会将其视为真正的bean。在XML配置中,当声明一个bean为`FactoryBean`类型时,需要使用`&`符号来获取`FactoryBean`本身而不是它创建的...