`
wanxiaotao12
  • 浏览: 476420 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring中FactoryBean中的getObject()方法的作用

 
阅读更多

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://weilingfeng98.iteye.com/blog/836637

分享到:
评论

相关推荐

    spring中FactoryBean中的getObject()方法实例解析

    Spring 中 FactoryBean 中的 getObject() 方法实例解析 Spring 框架中 FactoryBean 是一个非常重要的概念,它提供了一种创建和管理 Bean 的机制。在 Spring 中,FactoryBean 是一个特殊的 Bean,它可以创建其他 ...

    spring的FactoryBean增强我们的目标对象.rar

    在标题“spring的FactoryBean增强我们的目标对象.rar”中,提到的核心概念就是如何利用`FactoryBean`来增强目标对象,从而在方法调用时使用代理类而不是原始对象。 `FactoryBean`是Spring中用于对象创建的一种高级...

    Spring中的FactoryBean.rar

    综上所述,"Spring中的FactoryBean.rar"文件所涵盖的内容可能涉及FactoryBean的接口定义、应用场景、使用方法以及如何自定义FactoryBean等方面。通过学习这部分内容,开发者能够更好地理解Spring IoC容器的工作原理...

    spring源码解析之FactoryBean相关测试代码demo

    Spring容器会调用`FactoryBean`的`getObject()`方法来获取实际的对象,而不是直接实例化`FactoryBean`本身。 下面我们将逐步分析`FactoryBean`的相关测试代码: 1. **配置文件(spring.xml)** 在Spring的XML配置...

    详解Spring中的FactoryBean

    在Spring配置中,当我们引用一个`FactoryBean`时,Spring会识别到这个特殊的Bean,并调用`FactoryBean`的方法来获取最终的实例。例如,有一个`Person`类,它需要一个`Car`对象。在XML配置中,我们不需要直接声明`Car...

    简单了解Spring中BeanFactory与FactoryBean的区别

    简单了解Spring中BeanFactory与FactoryBean的区别 Spring框架中有两个非常关键的接口:BeanFactory和FactoryBean。虽然它们的名字相似,但它们的作用和实现机制却有很大的不同。 BeanFactory是Spring IoC容器的...

    spring中的FactoryBean代码示例

    在上面的示例中,我们实现了FactoryBean接口,并提供了getObject()方法来生成User对象。这样,我们可以通过getBean(id)方法获取User对象的实例,而不是UserFactory的实例。 FactoryBean的实现可以带来很多便捷,...

    FactoryBean代码最简实现

    当Spring容器遇到一个实现了`FactoryBean`接口的bean时,它不会直接调用`getBean()`方法来获取对象,而是调用`FactoryBean`的`getObject()`方法。这样,我们可以在`getObject()`方法中实现复杂的逻辑,如初始化、...

    68-BeanFactory与FactoryBean1

    在 Spring 中,FactoryBean 是一个特殊的 Bean,它实现了 FactoryBean 接口,该接口提供了 getObject() 方法来返回实例化后的对象。当我们在配置文件中配置了 FactoryBean 时,getBean() 方法返回的对象实际上是 ...

    SSH笔记-通过实现FactoryBean接口来创建 Bean

    当你在Spring配置文件中声明一个Bean,并指定它的类型为`FactoryBean`的实现类时,Spring不会直接调用无参构造函数来创建Bean,而是调用`FactoryBean`的方法来获取Bean实例。 首先,我们需要了解`FactoryBean`的...

    Spring中BeanFactory与FactoryBean接口的区别详解

    在这个例子中,`UserServiceFactoryBean`实现了FactoryBean,当从Spring容器中请求`IUserService`类型的Bean时,实际上会通过`UserServiceFactoryBean`的`getObject()`方法返回一个`UserServiceImpl`实例。...

    spring如何通过FactoryBean配置Bean

    在上面的代码中,我们实现了 FactoryBean 接口的三个方法:getObject()、getObjectType() 和 isSingleton()。其中,getObject() 方法负责返回一个 Car 实例,getObjectType() 方法返回 Car 类型,而 isSingleton() ...

    spring中的BeanFactory与FactoryBean的讲解

    Spring中的BeanFactory与...总结:今天,我们探讨了Spring中的BeanFactory和FactoryBean这两个概念,了解了它们在Spring IOC容器中的角色和作用。希望本文的内容对大家的学习或者工作具有一定的参考学习价值。

    Spring BeanFactory和FactoryBean区别解析

    Spring框架中,BeanFactory和FactoryBean是两个非常重要的概念,它们都是Spring IoC容器的核心组件。今天,我们将深入探讨这两个概念之间的区别和联系。 首先,让我们从BeanFactory开始。BeanFactory是IoC容器的...

    FactoryBean.zip

    在Spring配置文件中,当声明一个bean并将其类型设置为`FactoryBean`的实现类时,Spring不会直接实例化该bean,而是调用`FactoryBean`的方法来获取实际的业务对象。这种方式可以用来创建复杂或者需要特殊初始化过程的...

    spring与mybatis三种整合方法

    在Spring和MyBatis的整合过程中,通常有多种方法实现两者的无缝对接,以提高开发效率和代码的可维护性。下面将详细讲解这三种整合方法。 1. **使用MapperScannerConfigurer** `MapperScannerConfigurer` 是Spring...

    初探spring aop内部实现 java

    当ApplicationContext试图获取一个被标记为FactoryBean的bean时,它会调用FactoryBean的getObject()方法来得到真正的bean实例。这种模式使得我们可以自定义bean的创建过程,甚至创建非Spring管理的bean。 Spring的...

    spring-demo03-spring创建对象的5种方式.zip

    `FactoryBean`的`getObject()`方法返回实际的对象。这种方式适用于更复杂的实例化场景,如创建JDBC数据源或线程池。例如: ```java public class MyFactoryBean implements FactoryBean&lt;ExampleBean&gt; { @Override...

    factory-bean-demo.7z

    `FactoryBean`是Spring I/O体系中的一个关键组件,尤其在处理复杂对象创建或者需要控制对象初始化过程时,它的作用尤为突出。下面将详细介绍`FactoryBean`的工作原理、使用场景以及如何在实际项目中应用。 ### `...

    使用 FactoryBean结合Jmock实现动态Mock类的注入

    `FactoryBean`的`getObject()`方法负责返回一个由工厂生产的对象,而Spring容器会将其视为真正的bean。在XML配置中,当声明一个bean为`FactoryBean`类型时,需要使用`&`符号来获取`FactoryBean`本身而不是它创建的...

Global site tag (gtag.js) - Google Analytics