如何使用spring的FactoryBean

 时间:2026-02-15 15:29:48

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

  • 如何配置openSUSE Leap系统
  • winform编程之程序日志
  • c如何跨线程调用windows窗体控件
  • 安全开发流程(安全的软件开发流程)
  • 火狐浏览器如何清空缓存
  • 热门搜索
    慈溪旅游网 阳朔旅游景点 春节厦门旅游攻略 塞舌尔旅游攻略 药王谷旅游攻略 福建厦门旅游攻略 武汉附近旅游景点 九黄山旅游攻略 旅游体验师招聘信息 北京到三亚旅游