详解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攻击?(原理和示例)

