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").
转自:http://hi.baidu.com/victorlin23/blog/item/0e75802ed419a25e4fc226b0.html
相关推荐
Spring 中 FactoryBean 中的 getObject() 方法实例解析 Spring 框架中 FactoryBean 是一个非常重要的概念,它提供了一种创建和管理 Bean 的机制。在 Spring 中,FactoryBean 是一个特殊的 Bean,它可以创建其他 ...
在实际应用中,FactoryBean的使用需要注意以下几点: - 调用`getBean(String beanName)`时,如果beanName对应的bean是一个FactoryBean,Spring会返回FactoryBean创建的对象,而不是FactoryBean本身。 - 如果需要获取...
在Spring框架中,`FactoryBean`是一个非常重要的接口,它为Spring容器提供了更高级别的抽象,使得我们可以自定义Bean的创建过程。...理解并熟练运用`FactoryBean`,对于提升Spring应用的可扩展性和灵活性具有重要意义。
在实际应用中,我们通常使用BeanFactory来管理Bean的生命周期,而使用FactoryBean来生成其他Bean的实例。例如,在Spring MVC中,我们可以使用BeanFactory来管理Controller Bean的生命周期,而使用FactoryBean来生成...
本篇将通过一个测试代码示例来深入解析`FactoryBean`的工作原理及其在Spring配置中的应用。 首先,我们需要了解`FactoryBean`的基本概念。`FactoryBean`是Spring提供的一种扩展点,它是一个工厂,可以用来创建对象...
五、FactoryBean在Spring中的应用 在Spring框架中,FactoryBean可以用来创建和管理对象实例。例如,在上面的示例代码中,我们使用FactoryBean来创建和管理Cloth对象实例。 FactoryBean可以用来创建和管理复杂的对象...
在Spring框架中,`FactoryBean`是一个非常重要...理解并熟练运用`FactoryBean`,能显著提升你在Spring应用开发中的灵活性和掌控力。通过阅读提供的`factorybean`资源,你可以进一步深入研究`FactoryBean`的使用和实践。
在Spring框架中,BeanFactory和FactoryBean是两个重要的接口,它们各自扮演着不同的角色,但都与Spring容器的管理和创建对象密切相关。 **BeanFactory接口**是Spring容器的基础,它是整个Spring IoC(Inversion of ...
在 Spring 中, Bean 是应用程序的核心组件,它们可以是任何 Java 对象。 Spring 提供了多种方式来实例化和管理 Bean,包括通过构造方法、简单工厂模式、FactoryBean 等。 Spring 还提供了多种范围的 Bean,包括 ...
在 Spring 框架中,FactoryBean 是一种特殊的 Bean,它可以实现复杂的 Bean 实例化逻辑。通过 FactoryBean,我们可以将复杂的实例化逻辑封装起来,使得 Bean 的配置更加灵活和灵活。 在本文中,我们将通过一个示例...
本笔记将详细探讨如何通过实现`FactoryBean`接口来创建Bean,以及在Spring4中如何应用这一特性。 `FactoryBean`是Spring提供的一个接口,它提供了一种方式,让我们能够控制对象的创建过程。当你在Spring配置文件中...
6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...
Spring框架中,BeanFactory和FactoryBean是两个非常重要的概念,它们都是Spring IoC容器的核心组件。今天,我们将深入探讨这两个概念之间的区别和联系。 首先,让我们从BeanFactory开始。BeanFactory是IoC容器的...
MyBatis-Spring 是一个将 MyBatis ORM 框架与 Spring 框架集成的库,使得在 Spring 应用中使用 MyBatis 变得更加方便。mybatis-spring-1.3.3.jar 文件是这个集成库的一个版本,提供了对 MyBatis 1.3.3 和 Spring 的...
Spring 中的 BeanFactory 和 FactoryBean BeanFactory 是 Spring 框架中的核心组件之一,负责管理 Bean 的生命周期,包括实例化、配置和注入对象之间的关系。它是 Spring IOC(控制反转)容器的核心组件,提供了...
13.6 实际应用中的任务调度 13.6.1 如何产生任务 13.6.2 任务调度对应用程序集群的影响 13.6.3 任务调度云 13.6.4 Web应用程序中调度器的启动和关闭问题 13.7 小结 第14章 使用OXM进行对象XML映射 14.1 认识XML解析...
MyBatis-Spring 是一个轻量级的框架,它将 MyBatis 和 Spring 进行了无缝集成,使得在 Spring 应用中使用 MyBatis 变得更加简单。这个名为 "mybatis-spring-1.0.1-bundle.zip" 的压缩包,包含的是 MyBatis-Spring 的...
总的来说,`FactoryBean`是Spring框架中一个强大的工具,它扩展了Spring容器的能力,使得我们可以自定义对象的创建方式,更好地满足了复杂应用的需求。通过"FactoryBean.zip"中的示例,我们可以深入学习这一特性,...
而MyBatis-Spring则是MyBatis与Spring框架的桥梁,它使得在Spring应用中使用MyBatis变得更加方便。 1. **MyBatis简介** MyBatis提供了SQL语句和Java代码之间的映射,通过XML或注解方式配置和原始映射,将接口和...