详解Spring中的FactoryBean

发布时间 - 2026-01-11 00:31:05    点击率:

spring  FactoryBean 是创建 复杂的bean,一般的bean 直接用xml配置即可,如果一个bean的创建过程中涉及到很多其他的bean 和复杂的逻辑,用xml配置比较困难,这时可以考虑用FactoryBean

例子如下:

1:创建一个Car类(是为了简便)一般不能直接给出Car类,如果是这样直接注入就可以或者Car对象了,这里只是为了简便。

package com.myapp.core.factorybean; 
 
public class Car { 
 private String make; 
 private int year; 
  public String getMake() { 
    return make; 
  } 
  public void setMake(String make) { 
    this.make = make; 
  } 
  public int getYear() { 
    return year; 
  } 
  public void setYear(int year) { 
    this.year = year; 
  } 
    
}

2:一个FactoryBean的实现拥有创建car

package com.myapp.core.factorybean; 
 
import org.springframework.beans.factory.FactoryBean; 
 
public class MyCarFactoryBean implements FactoryBean<Car>{ 
   
  private String make; 
   
  private int year; 
 
  public void setMake(String make) { 
    this.make = make; 
  } 
 
  public void setYear(int year) { 
    this.year = year; 
  } 
 
  @Override 
  public Car getObject() throws Exception { 
    // TODO Auto-generated method stub 
     
    //Here is a complex car object created 
     // wouldn't be a very useful FactoryBean 
    // if we could simply instantiate the object! 
    Car car = new Car(); 
     
    if(year != 0){ 
      car.setYear(this.year); 
    } 
     
    if("make".equals(make)){ 
      car.setMake("we are making bla bla bla"); 
    }else{ 
      car.setMake(this.make); 
    } 
     
    return car; 
  } 
 
  @Override 
  public Class<?> getObjectType() { 
    // TODO Auto-generated method stub 
    return Car.class; 
  } 
 
  @Override 
  public boolean isSingleton() { 
    // TODO Auto-generated method stub 
    return false; 
  } 
 
} 

以上中创建car太简单了,如果太简单就没有必要用FactoryBean创建了,可以写的复杂些。

3:Person 引用一个car

package com.myapp.core.factorybean; 
 
public class Person { 
  
  private Car car; 
 
  public Car getCar() { 
    return car; 
  } 
 
  public void setCar(Car car) { 
    this.car = car; 
  } 
   
  public String toString(){ 
     
    return car.getMake()+"::::"+car.getYear(); 
  } 
} 

4:配置引用xml格式:

<bean id="car" class="com.myapp.core.factorybean.MyCarFactoryBean"> 
  <property name="make" value="makeing car"/> 
  <property name="year" value="123"/> 
</bean> 
 
<bean id="person" class="com.myapp.core.factorybean.Person"> 
 
<property name="car" ref="car"/> 
 
</bean> 

5:编写测试类测试:

package com.myapp.core.factorybean; 
 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
 
public class MainTest { 
 public static void main(String[] args) { 
   
   ApplicationContext context = new ClassPathXmlApplicationContext("resource/others.xml"); 
    
 Person person =  (Person)context.getBean("person"); 
    
   // Car car =  (Car)context.getBean("car"); 
    
  // System.out.println(car); 
  System.out.println(person); 
} 
} 

测试结果 makeing car::::123

利用FactoryBean创建car成功

只是为了说明思想。因为这个接口太重要了。在Spring中有很多类实现了该接口。

以上所述是小编给大家介绍的详解Spring中的FactoryBean,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# spring  # factorybean  # spring中beanfactory  # Spring基于ProxyFactoryBean创建AOP代理  # Spring中BeanFactory与FactoryBean接口的区别详解  # spring中的BeanFactory与FactoryBean的讲解  # spring中FactoryBean中的getObject()方法实例解析  # spring中的FactoryBean代码示例  # Spring中BeanFactory解析bean详解  # 深入浅出重构Mybatis与Spring集成的SqlSessionFactoryBean(上)  # spring如何通过FactoryBean配置Bean  # 小编  # 在此  # 是这样  # 中有  # 其他的  # 给大家  # 要用  # 涉及到  # 要了  # 所述  # 太重  # 创建一个  # 给我留言  # 感谢大家  # 就可以  # 过程中  # 是为了  # 疑问请  # 有任何  # 实现了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 敲碗10年!Mac系列传将迎来「触控与联网」双革新  制作公司内部网站有哪些,内网如何建网站?  javascript基于原型链的继承及call和apply函数用法分析  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  大同网页,大同瑞慈医院官网?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  网站制作报价单模板图片,小松挖机官方网站报价?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Android 常见的图片加载框架详细介绍  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  微信推文制作网站有哪些,怎么做微信推文,急?  如何在宝塔面板中创建新站点?  如何实现javascript表单验证_正则表达式有哪些实用技巧  深入理解Android中的xmlns:tools属性  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  如何在Windows 2008云服务器安全搭建网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel如何处理CORS跨域请求?(配置示例)  java获取注册ip实例  canvas 画布在主流浏览器中的尺寸限制详细介绍  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Python文本处理实践_日志清洗解析【指导】  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  linux top下的 minerd 木马清除方法  php485函数参数是什么意思_php485各参数详细说明【介绍】  香港服务器租用费用高吗?如何避免常见误区?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel中的withCount方法怎么高效统计关联模型数量  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel怎么判断请求类型_Laravel Request isMethod用法  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  如何选择PHP开源工具快速搭建网站?  公司门户网站制作流程,华为官网怎么做?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  ,网页ppt怎么弄成自己的ppt?  Laravel如何使用Collections进行数据处理?(实用方法示例)  lovemo网页版地址 lovemo官网手机登录  Laravel如何保护应用免受CSRF攻击?(原理和示例)