BeanFactory与FactoryBean2

简介:
BeanFactory 为一个管理 bean 的工厂(即为 spring 的容器),它管理的对象可以是 bean 也可以是 FactoryBean( 这种请况会再调用 FactoryBean getObject() 获取真正的 bean)
FactoryBean 为一个工厂 bean ,受 BeanFactory 管理,同时它也管理着一个 bean
 
接着来看一看 FactoryBean
public   interface  FactoryBean {
    Object getObject()  throws  Exception;
    Class getObjectType();
     boolean  isSingleton();
}
FactoryBean spring 的一个工厂 bean ,他可以管理一个 bean ,通过 isSingleton 方法设置此 bean 是否为单例,通过 getObject 方法获取此 bean 实例的引用, getObjectType
方法获取此 bean 的类型。记住一点: FactoryBean 在配置文件中的定义和普通 bean 没有区别,但是当客户端对 beanId 进行请求时,返回的是它管理的 bean 实例引用 (即此 FactoryBean 通过 getObject 获取了它所管理的 bean 实例引用 )。
 
下面举一个例子来说明:
Fengshan1.java (此类为被 FactoryBean 管理的类):
public class  FengShan1 {
    public void descrip(){
       System.out.println(" 凤山是个美丽的小县城! ");
    }
}
 
TianE.java( 此类为继承 FactoryBean 接口的类 )
public class  TianE implements FactoryBean {
    public Object getObject() throws Exception {
       return new FengShan1();
    }
    public Class getObjectType() {
       return FengShan1.class;
    }
    public boolean isSingleton() {
       return true;
    }
}
 
Beam.xml(spring 配置文件 ):
<? xml  version = "1.0"  encoding = "UTF-8" ?>
<! DOCTYPE  beans  PUBLIC  "-//SPRING//DTD BEAN 2.0//EN"  "http://www.springframework.org/dtd/spring-beans-2.0.dtd" >
< beans  default-autowire = "byName"  >
<!—FactoryBean 配置 -->
      < bean  id = "tiane"  class = "com.dvnchina.test.TianE"   />
</ beans >
 
Test.java( 测试类 )
public class  Test extends TestCase {
    public void test(){
       ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
       FengShan1 fengShan1 = (FengShan1) ctx.getBean("tiane");
       fengShan1.descrip();
       FengShan1 fengShan2 = (FengShan1) ctx.getBean("tiane");
       System.out.println(fengShan1==fengShan2);
    }
}
 
结果:
凤山是个美丽的小县城!
true
 
在测试类中, ctx.getBean("tiane") 获取的是 FactoryBean BeanId ,但返回的是它所管理的 Bean 实例( FengShan1 )。另外,因为在 FactoryBean isSingleton 方法返回值为 true, 因此 fengShan1 fengShan2 将指向同一个引用。









本文转自 yzzh9 51CTO博客,原文链接:http://blog.51cto.com/java999/196400,如需转载请自行联系原作者
目录
相关文章
|
Ubuntu Shell 开发者
helloworld 镜像 | 学习笔记
快速学习 helloworld 镜像
helloworld 镜像 | 学习笔记
|
API
uni-app点击按钮弹出提示框-uni.showModal(OBJECT),选择确定和取消
uni-app点击按钮弹出提示框-uni.showModal(OBJECT),选择确定和取消
2654 0
|
弹性计算 JSON Ubuntu
配置镜像加速器|学习笔记
快速学习配置镜像加速器
配置镜像加速器|学习笔记
|
19天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
32162 117
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
9天前
|
应用服务中间件 API 网络安全
3分钟汉化OpenClaw,使用Docker快速部署启动OpenClaw(Clawdbot)教程
2026年全新推出的OpenClaw汉化版,是基于Claude API开发的智能对话系统本土化优化版本,解决了原版英文界面的使用壁垒,实现了界面、文档、指令的全中文适配。该版本采用Docker容器化部署方案,开箱即用,支持Linux、macOS、Windows全平台运行,适配个人、企业、生产等多种使用场景,同时具备灵活的配置选项和强大的扩展能力。本文将从项目简介、部署前准备、快速部署、详细配置、问题排查、监控维护等方面,提供完整的部署与使用指南,文中包含实操代码命令,确保不同技术水平的用户都能快速落地使用。
4715 4
|
15天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
6806 18
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
14天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
4767 11
|
16天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
5667 21
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手