如何使用spring的FactoryBean

2025-12-01 16:28:01

1、在开始定义我们自己的工厂bean之前,先介绍下FactoryBean这个接口类有哪些方法:

T getObject():返回实际工厂bean创建的bean实例,如果是单实例,会放到spring的缓存池中

boolean isSingleton():返回bean实例的作用域是singleton还是prototype。

Class<T> getObjectType():返回工厂创建的bean类型。

如何使用spring的FactoryBean

2、首先创建一个简单书本对象类

/**

* Created by shaowei on 2017/7/13.

* 书本

*/

public class Book {

   /**

    * 名字

    */

   private String name;

   /**

    * 价格

    */

   private double price;

   public String getName() {

       return name;

   }

   public void setName(String name) {

       this.name = name;

   }

   public double getPrice() {

       return price;

   }

   public void setPrice(double price) {

       this.price = price;

   }

}

3、创建BookFactoryBean类,实现FactoryBean接口

/**

* Created by shaowei on 2017/7/13.

* 书本工厂bean

*/

public class BookFactoryBean implements FactoryBean<Book> {

   @Override

   public Book getObject() throws Exception {

       Book book = new Book();

       book.setName("spring");

       book.setPrice(80.0);

       return book;

   }

   @Override

   public Class<?> getObjectType() {

       return Book.class;

   }

   @Override

   public boolean isSingleton() {

       return false;

   }

}

4、创建测试工厂bean测试类

/**

* Created by shaowei on 2017/7/13.

* spring工厂bean测试类

*/

public class TestFactoryBean {

   @Test

   public void testGetBean(){

       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-test.xml");

       System.out.println(context.getBean("book"));

       System.out.println(context.getBean("&book"));

   }

}

5、可以选中一个测试方法,右键运行testGetBean测试类方法,如果不选中,默认是运行本测试类所有case方法

如何使用spring的FactoryBean

6、运行完成之后,可以从打印的结果中看到getBean("book")获取的是Book类的实例,getBean("&book")获取的则是BookFactoryBean工厂bean的实例

如何使用spring的FactoryBean

7、以上就是自定义方式使用spring的FactoryBean。我们也可以看看spring类库里已有的FactoryBean的实现例子,EhCacheManagerFactoryBean就是其中之一:

@Override

public CacheManager getObject() {

  return this.cacheManager;

}

@Override

public Class<? extends CacheManager> getObjectType() {

  return (this.cacheManager != null ? this.cacheManager.getClass() : CacheManager.class);

}

@Override

public boolean isSingleton() {

  return true;

}

如何使用spring的FactoryBean

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢