Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法

小程序结合Three.js与gsap:打造流畅3D动画的完整指南 本文详细介绍了如何在小程序中整合Three.js与GSAP动画库,打造流畅的3D动画效果。通过从环境搭建、基础场景创建到模型加载与复杂动画编排的完整指南,帮助开发者克服小程序性能限制,实现如商品360度展示等沉浸式交互体验,提升产品视觉吸引力。 阅读详情

Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法

Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法

1. BeanFactory

  BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。

  Spring为我们提供了许多易用的BeanFactory实现,XmlBeanFactory就是常用的一个,该实现将以XML方式描述组成应用的对象及对象间的依赖关系。XmlBeanFactory类将持有此XML配置元数据,并用它来构建一个完全可配置的系统或应用。

  实例化容器

1 Resource resource = new FileSystemResource("beans.xml");
2 BeanFactory factory = new XmlBeanFactory(resource);
1 ClassPathResource resource = new ClassPathResource("beans.xml");
2 BeanFactory factory = new XmlBeanFactory(resource);
1 ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml", "applicationContext-part2.xml"});
3 BeanFactory factory = (BeanFactory) context;

 基本就是这些了,接着使用getBean(String beanName)方法就可以取得bean的实例;BeanFactory提供的方法及其简单,仅提供了六种方法供客户调用:

  •   boolean containsBean(String beanName) 判断工厂中是否包含给定名称的bean定义,若有则返回true
  •   Object getBean(String) 返回给定名称注册的bean实例。根据bean的配置情况,如果是singleton模式将返回一个共享实例,否则将返回一个新建的实例,如果没有找到指定bean,该方法可能会抛出异常
  •   Object getBean(String, Class) 返回以给定名称注册的bean实例,并转换为给定class类型
  •   Class getType(String name) 返回给定名称的bean的Class,如果没有找到指定的bean实例,则排除NoSuchBeanDefinitionException异常
  •   boolean isSingleton(String) 判断给定名称的bean定义是否为单例模式
  •   String[] getAliases(String name) 返回给定bean名称的所有别名

2. FactoryBean

  以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean<T>接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FactoryBean本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取。

  例如自己实现一个FactoryBean,功能:用来代理一个对象,对该对象的所有方法做一个拦截,在调用前后都输出一行LOG,模仿ProxyFactoryBean的功能。

复制代码
 1 /**
 2  * my factory bean<p>
 3  * 代理一个类,拦截该类的所有方法,在方法的调用前后进行日志的输出
 4  * @author daniel.zhao
 5  *
 6  */
 7 public class MyFactoryBean implements FactoryBean<Object>, InitializingBean, DisposableBean {
 8 
 9     private static final Logger logger = LoggerFactory.getLogger(MyFactoryBean.class);
10     
11     private String interfaceName;
12     
13     private Object target;
14     
15     private Object proxyObj;
16     
17     @Override
18     public void destroy() throws Exception {
19         logger.debug("destroy......");
20     }
21 
22     @Override
23     public void afterPropertiesSet() throws Exception {
24         proxyObj = Proxy.newProxyInstance(
25                 this.getClass().getClassLoader(), 
26                 new Class[] { Class.forName(interfaceName) }, 
27                 new InvocationHandler() {
28                     
29             @Override
30             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
31                 logger.debug("invoke method......" + method.getName());
32                 logger.debug("invoke method before......" + System.currentTimeMillis());
33                 Object result = method.invoke(target, args);
34                 logger.debug("invoke method after......" + System.currentTimeMillis());
35                 return result;
36             }
37             
38         });
39         logger.debug("afterPropertiesSet......");
40     }
41 
42     @Override
43     public Object getObject() throws Exception {
44         logger.debug("getObject......");
45         return proxyObj;
46     }
47 
48     @Override
49     public Class<?> getObjectType() {
50         return proxyObj == null ? Object.class : proxyObj.getClass();
51     }
52 
53     @Override
54     public boolean isSingleton() {
55         return true;
56     }
57 
58     public String getInterfaceName() {
59         return interfaceName;
60     }
61 
62     public void setInterfaceName(String interfaceName) {
63         this.interfaceName = interfaceName;
64     }
65 
66     public Object getTarget() {
67         return target;
68     }
69 
70     public void setTarget(Object target) {
71         this.target = target;
72     }
73 
74     public Object getProxyObj() {
75         return proxyObj;
76     }
77 
78     public void setProxyObj(Object proxyObj) {
79         this.proxyObj = proxyObj;
80     }
81 
82 }
复制代码

XML-Bean配置如下

1 <bean id="fbHelloWorldService" class="com.ebao.xxx.MyFactoryBean">
2     <property name="interfaceName" value="com.ebao.xxx.HelloWorldService" />
3     <property name="target" ref="helloWorldService" />
4 </bean>

Junit Test class

复制代码
 1 @RunWith(JUnit4ClassRunner.class)
 2 @ContextConfiguration(classes = { MyFactoryBeanConfig.class })
 3 public class MyFactoryBeanTest {
 4 
 5     @Autowired
 6     private ApplicationContext context;
 7     
 8     /**
 9      * 测试验证FactoryBean原理,代理一个servcie在调用其方法的前后,打印日志亦可作其他处理
10      * 从ApplicationContext中获取自定义的FactoryBean
11      * context.getBean(String beanName) ---> 最终获取到的Object是FactoryBean.getObejct(), 
12      * 使用Proxy.newInstance生成service的代理类
13      */
14     @Test
15     public void testFactoryBean() {
16         HelloWorldService helloWorldService = (HelloWorldService) context.getBean("fbHelloWorldService");
17         helloWorldService.getBeanName();
18         helloWorldService.sayHello();
19     }
20 }
复制代码

 

其实FactoryBean这栋特点,可以实现很多有用的功能,实现大家多多评论多多补充,一起探讨。

分类:  Spring IOC
标签:  BeanFactory,  FactoryBean
Orin 10G PHY网络分析 由于调试用的10G PHY,所以整理下分析过程; 1.从Orin devkit 丝印来看RJ45 对应J17 通过搜索 MGBE_PHY_A_N 找到连接的10G PHY, 原理图上标明了MDIO address 为0x0, 使用的PHY 芯片为 Marvel 的AQR113C, 主要特性: 架构: 关键特征: MDC 连接了GPIO26_XFI0_MDC; MDIO 连接了GPIO25_XFI0_MDIO; 通过pinmux_config映射表也可以.. 阅读详情

相关推荐

vue 插件vue-awesome-swiper实现 三张图片,左右两边显示一半的效果的示例

希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

weixin_50450473的博客 3249

spring 最顶级接口 beanfactory详解

BeanFactory是Spring框架中的一个接口,它是一个工厂类,用来创建和管理Spring中的Bean对象。BeanFactory接口定义了Spring容器的基本规范和行为,它提供了一种机制来将配置文件中定义的Bean实例化、配置和管理起来。本文从BeanFactory的简介、使用、扩展以及扩展点等方面介绍了BeanFactory的相关知识点。

weixin_44251099的博客 4735

Ubuntu 20.04 上 Geant4 安装避坑全记录:从源码编译到 B1 示例跑通(含数据包加速下载)

本文详细记录了在Ubuntu 20.04系统上从源码编译安装Geant4的全过程,包括环境准备、依赖安装、CMake参数解析、多线程编译优化以及数据包加速下载等关键步骤。特别针对B1示例的测试与验证提供了完整流程,帮助科研人员和学生避开常见安装陷阱,提升粒子物理模拟效率。

weixin_31220401的博客 312

浅谈Spring中的BeanFactory与FactoryBean

1、getobject ()方法会返回该FactoryBean “生产” 的对象实例,我们需要实现该方法以给出自己的对象实例化逻辑;2、getobjectTYype ()方法仅返回getobject ()方法所返回的对象的类型,如果预先无法确定,则返回null;特别注意这个方法主要作用是:该。

宜春 1858

少儿学编程系列--使用递归画出龙形曲线DragonCurve

龙形曲线(Dragon Curve) 龙形曲线(Dragon Curve)又叫分形龙,是一种自相似碎形曲线的统称,因形似龙的蜿蜒盘曲而得名 使用黄金比例画龙形曲线 根据黄金比例画一条龙曲线。每次递归,第一步向左转32.89度,移动0.74倍原距离;第二个递归步骤向右转46.99度,移动原来距离的0.55倍。请查看这个网页(https://larryriddle.agnesscott.org/ifs/heighway/goldenDragon.htm)了解关于龙形黄线数学的细节 龙形曲线效果 .

penriver的博客 2298

DC/DC开关电源学习笔记(一)开关电源技术概述

开关模式电源(Switch Mode Power Supply,简称SMPS),又称交换式电源、开关变换器,是一种高频化电能转换装置,是电源供应器的一种。其功能是将一个位准的电压,透过不同形式的架构转换为用户端所需求的电压或电流。开关电源的输入多半是交流电源(例如市电)或是直流电源,而输出多半是需要直流电源的设备,例如个人电脑,而开关电源就进行两者之间电压及电流的转换。【百度百科】

小幽余生不加糖 1620

Spring中BeanFactory和FactoryBean详解

# 【1】FactoryBean 工厂 Bean 跟普通Bean不同, 其返回的对象不是指定类的一个实例, 其返回的是该工厂 Bean 的 getObject 方法所返回的对象。 **实现实例** ```java public class CarFactoryBean implements FactoryBean<Car>{ private String brand; public void setBrand(String brand) { this.brand = brand; } /

小小默:进无止境 1万+

2、欧洲期权的赫斯顿模型

本文详细介绍了赫斯顿随机波动率模型在欧洲期权定价中的应用。模型通过引入随机方差过程,克服了布莱克-斯科尔斯模型中波动率恒定的局限性,更贴近市场实际。文章阐述了模型的动态结构、风险中性转换、期权定价公式及其半封闭解的计算方法,并提供了基于VBA的数值实现方案。通过梯形法则与高斯积分等数值方法对比,分析了不同积分策略的精度与效率。同时验证了当波动率为零时,赫斯顿模型退化为布莱克-斯科尔斯模型的一致性。最后讨论了模型的优势、挑战及实际应用建议,强调了数值积分稳定性和参数估计的重要性。

tequila的博客 350

Spring之BeanFactory详解

Spring的本质是一个bean工厂(beanFactory)或者说bean容器,它按照我们的要求,生产我们需要的各种各样的bean,提供给我们使用。只是在生产bean的过程中,需要解决bean之间的依赖问题,才引入了依赖注入(DI)这种技术。也就是说依赖注入是beanFactory生产bean时为了解决bean之间的依赖的一种技术而已。 beanFactory会在bean的生命周期的各个阶段中对bean进行各种管理,并且spring将这些阶段通过各种接口暴露给我们,让我们可以对bean进行各种处理,我们

weixin_44399827的博客 1万+

(十二)深入理解蓝牙BLE之“移植Bluez 5.18源码到嵌入式平台”

在某嵌入式平台进行蓝牙开发,发现上面居然没有btmon,hciattach,hcitool等蓝牙调试工具,无奈之下,只好移植bluez协议栈到目标嵌入式平台,建议移植5.18版本(最新的5.54版本居然hcitool等工具不是默认编译的,需要修改Makefile才可以)。 看到很多讲解移植过程的文章都是需要积分的,觉得写一篇免积分的文章还是有些意义的,欢迎同行来交流。 移植环境:Linux ubuntu 目标平台:sigmastar 星宸科技 配置交叉编译工具链:export PATH=$PATH:

2964

Qt应用软件【协议篇】自定义协议处理串口半包贴包

Qt串口数据,半包,贴包,丢包数据处理

小鱼酱的博客 1211

BeanFactory 简介以及它 和FactoryBean的区别(阿里面试)

BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。ApplicationContext接口,它由BeanFactory接口派生而来,ApplicationContext包含BeanFactory的所有功能,通常建议比B...

2655

【YOLOv12多模态融合改进】| TFAM:时序融合注意力模块 | 引入通道 - 空间双分支注意力机制,解决双模态特征融合中时序关联不足的问题

TFAM模块通过时序信息驱动的注意力机制,解决了双时相特征融合中时序关联不足的问题,实现了更精准的变化区域定位和特征表示。其结构轻量、泛化性强,为变化检测任务提供了一种高效的特征融合解决方案。

Limiiiing的博客 866

Spring FactoryBean和BeanFactory 区别

1 BeanFactory 是ioc容器的底层实现接口,是ApplicationContext 顶级接口 spring不允许我们直接操作 BeanFactory bean工厂,所以为我们提供了ApplicationContext 这个接口 此接口集成BeanFactory 接口,ApplicationContext包含BeanFactory的所有功能,同时还进行更多的扩展。 BeanFactor...

. 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

spring中BeanFactory和FactoryBean的区别

spring中BeanFactory和FactoryBean的区别

淡淡的幸福的博客 7万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring 中 BeanFactory 与 FactoryBean 的区别

Spring 中 BeanFactory 与 FactoryBean 的区别 直接区别 直面意思:Bean工厂、工厂Bean 1、BeanFactory:以 Factory 结尾,表示它是一个工厂类(接口),用于管理 Bean 的一个工厂。在 Spring 中,BeanFactory 是 IOC 容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。 2、FactoryBean:以 Bean 结尾,表示它是一个 Bean,不同于普通 Bean 的是:它是实现了 Factor

琦彦 1845

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring BeanFactory 和 FactoryBean区别详解

详细介绍Spring BeanFactory 和 FactoryBean区别

m0_66220639的博客 994

Spring之BeanFactory和FactoryBean接口的区别

文章目录一、BeanFactory接口二、FactoryBean接口1.简单实现2.增强实现3.FactoryBean的实际使用案例三、总结   Spring框架中的BeanFactory接口和FactoryBean接口因为名称相似,老是容易搞混淆,而且也是面试过程中经常会碰到的一个问题。所以本文就专门给大家整理出来。 一、BeanFactory接口   BeanFactory接口是Spring容...

波波烤鸭的博客 6105

Spring BeanFactory与FactoryBean的区别

BeanFactory是spring中比较原始的Factory。它无法支持spring的许多插件,如AOP功能,Web应用等,ApplicationContext接口由Beanfactory接口派生而来,并对其功能进行了扩展。 BeanFactory与FactoryBean的区别: 相同点:都是接口 区别: Beanfactory是一个工厂类,用于管理Bean的一个工厂,在sprin...

曰业而安的博客 1420

【Spring】BeanFactory与FactoryBean的区别

【Spring】BeanFactory与FactoryBean的区别1. BeanFactory1.1 源码1.2 使用场景2. FactoryBean2.1 源码2.2 示例2.3 使用场景3. 区别 1. BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定义了getBean()、containsBean()等管理Bean的通用方法。Spring的容器都是它的具体实现主要有三种如: DefaultListableBeanF

来日浅谈的博客 612

spring中FactoryBean和BeanFactory区别

BeanFactory:是Spring IoC容器的核心接口,用于管理Bean的一个工厂。它定义了IoC容器的最基本形式,并提供了IoC容器应遵守的最基本的接口,也就是Spring IoC所遵守的最底层和最基本的编程规范。BeanFactory的主要职责包括实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。FactoryBean:是一个特殊的Bean,它实现了FactoryBean接口。FactoryBean不仅仅是一个Bean,它更像是一个工厂,用于生成或修饰其他Bean的实例。

sutingStart的博客 1729

【spring】BeanFactory与FactoryBean的区别

文章目录前言一、为什么会有FactoryBean?二、通过源码深入学习FactoryBean总结 前言 经常说spring的核心是ioc,ioc的核心是BeanFactory。然而在spring中还有一个很容易让人混淆的词FactoryBean,很容易让人无法理解。本文通过一些mybatis源码来讲述其区别,请大家参考。 一、为什么会有FactoryBean? BeanFactory是在学习IOC第一课的时候就遇到的。它是生产bean的工厂。在此工厂中,我们可以生产出我们想要的bean,并且通过

叁滴水 的博客 4301

Spring BeanFactory和FactoryBean的区别

目录 一、简介 二、BeanFactory 三、FactoryBean 四、总结 一、简介 在Spring中,有这么2个接口:BeanFactory和FactoryBean,名字很相似,很多小伙伴经常混淆,在面试的时候也经常会被问BeanFactory和FactoryBean两者的区别。本篇文章将详细介绍它们的区别,并结合示例,帮助大家对BeanFactory和FactoryBean有一个很好的认识。 二、BeanFactory BeanFactory是Spring IoC 容器的顶层接口,

weixiaohuai的博客 920

spring中FactoryBean和BeanFactory的区别

目录 一、BeanFactory 1.1 源码 1.2 使用场景 二、FactoryBean 2.1 源码 2.2 示例 2.2.1 方法一 2.2.2 方法二 2.3 FactoryBean的两种用法 2.3.1 简化xml配置,隐藏细节 2.3.2 返回不同Bean的实例 2.4 使用场景 三、BeanFactory和FactoryBean的区别以及共同点 一、BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),它负责生..

大叶子不小的博客 892

Spring BeanFactory 与 FactoryBean的区别

首先总结一下BeanFactory 与 FactoryBean 的区别 BeanFactroy spring中Bean的工厂,它能够去生产我们的类,并且能够获取我们的对象,比如我们的一个类交给spring去管理,我们可以通过这个BeanFactroy 直接get BeanName出来。 FactroyBean,它是spring中一个特殊的Bean,它是一个接口里面有三个方法需要去实现,实现了F...

@Bean 798

Spring中BeanFactory, FactoryBean,ApplicationContext的区别

Spring中BeanFactory, FactoryBean,ApplicationContext的区别

果酱 の 博客 1133
上一篇: urlDecode百科
下一篇: 原型模式的java实现例子
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值