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

ROS——无人机ROS仿真包 rotors_simulator 编译教程 文章目录 安装wstool sudo apt install python3-wstool 创建ROS工程 $ mkdir -p ~/UAV/src $ cd ~/UAV/src $ catkin_init_workspace # initialize your catkin workspace $ wstool init 下载源码 git clone git@github.com:ethz-asl/rotors_simulator.git 源码链接: https://github.com/eth 阅读详情


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这栋特点,可以实现很多有用的功能,实现大家多多评论多多补充,一起探讨。

【YOLOv11】070、YOLOv11异常检测:正常数据训练下的异常目标识别 本文探讨了如何利用YOLOv11模型进行工业异常检测,重点介绍了仅使用正常样本训练模型的创新方法。文章首先通过产线误报案例引出异常检测的核心问题,阐述了YOLOv11作为特征提取器的改造思路,包括正常数据训练、特征空间构建和异常度量等关键步骤。实战部分提供了精简代码示例,强调数据增强控制、特征层选择和自编码器应用等技巧。作者还总结了容易出错的细节,如特征选择、阈值设定和计算效率优化等,并给出实用建议:从简单方法入手、重视可视化、确保数据质量、部署时设置复核机制等。最后指出该方法虽能减少对异常样本的依赖,但需 阅读详情

相关推荐

保姆级教程:在PX4 Gazebo仿真中为Iris无人机挂载Intel D435i深度相机(含完整配置流程)

本文提供在PX4 Gazebo仿真环境中为Iris无人机挂载Intel D435i深度相机的完整配置流程,涵盖环境准备、模型部署、插件安装及调试技巧。通过详细步骤和常见问题解决方案,帮助开发者快速搭建深度相机仿真环境,适用于无人机视觉开发与算法测试。

weixin_28688385的博客 338

浅谈Spring中的BeanFactory与FactoryBean

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

宜春 1858

从零开始 使用OMNET++结合VEINS,INET和SUMO的联合仿真

搭建仿真的环境,导入VEINS和INET开源库,使用INET库中提供的网络协议和功能模型来模拟通信协议和网络功能,使用SUMO创建道路网络和车辆轨迹,并导出到OMNeT++中 在OMNeT++中使用VEINS通过socket和SUMO连接,借助VEINS实现的TRACI接口来设置车辆相关的行为和场景,最后在OMNET++中结合VEINS,SUMO和INET运行联合仿真实验,并分析车辆在遇到紧急情况下的通信状况和具体行为

mjmmm的博客 1万+

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万+

海康VisionMaster表面缺陷滤波实战:从参数调优到工业检测避坑指南

本文深入探讨海康VisionMaster表面缺陷滤波技术在工业检测中的应用,从参数调优到ROI绘制与Blob分析的协同策略,提供金属外壳、锂电池铝壳等复杂表面的缺陷检测实战指南。通过多级滤波架构和动态ROI生成法,显著提升检出率至98.7%,误检率低于0.5%,为工业质检提供智能化解决方案。

ujm5678901的博客 330

Field _II 仿真 学习笔记

参考Field II的使用说明,进行了四个例子的练习。仿真程序和结果如下: PURPOSE1:Calculate the received response from all elements of a linear array and plot the responses and the summed response 【计算来自所有线性阵元的接收响应,并绘制该响应以及叠加响应。】 >>

qq_34018578的博客 1万+

spring 最顶级接口 beanfactory详解

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

weixin_44251099的博客 4736

Vivado ChipScope Debugging: Overcoming Common DRC Errors in FPGA Design

本文深入解析Vivado ChipScope调试中常见的DRC错误,特别是AVAL-244和AVAL-245等时钟相关问题,提供实用的Tcl命令解决方案和最佳实践。通过将DRC错误降级为警告的技巧,帮助FPGA设计者高效完成调试流程,同时强调何时应保留DRC检查以确保设计可靠性。

weixin_30335575的博客 418

BeanFactory和FactoryBean的区别

区别: https://liayun.blog.youkuaiyun.com/article/details/110391066 BeanFactory是个Factory,也就是IOC容器或对象工厂, 而FactoryBean就是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。 但对FactoryBean而言,这个Bean不是简单的Bean,FactoryBean是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。 Fac

weixin_45723046的博客 1万+

银河麒麟V10 SP3下NFS客户端挂载失败?5个常见问题排查与修复

本文针对银河麒麟V10 SP3系统中NFS客户端挂载失败的常见问题,提供了5个实战排查方案。从基础服务状态检查到防火墙配置、版本兼容性、/etc/fstab设置及权限映射,详细解析了问题根源与解决方案,帮助用户快速恢复NFS文件共享功能。

weixin_42525005的博客 363

Unity Sprite Editor切片功能详解:如何快速将一张大图拆分成多个小图(附常见问题解决)

本文详细解析了Unity Sprite Editor的切片功能,指导开发者如何高效地将一张大图拆分为多个独立小图。文章涵盖了自动与手动切片操作步骤、轴心点设置、子精灵命名管理等核心技巧,并针对切片错位、性能优化等常见问题提供了实用解决方案,帮助提升2D游戏资源处理效率。

i0j1k2l3m的博客 648

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

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

2655

ardupilot 获取避障传感器数据

本节主要记录自己学ardupilot的避障代码过程,首先看下怎么注册避障传感器,然后怎么获取避障数据。

陌城烟雨 5525

Spring FactoryBean和BeanFactory 区别

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

. 1万+

VC中sqlite的使用

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

spring中BeanFactory和FactoryBean的区别

spring中BeanFactory和FactoryBean的区别

淡淡的幸福的博客 7万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring 中 BeanFactory 与 FactoryBean 的区别

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

琦彦 1846

Spring BeanFactory 和 FactoryBean区别详解

详细介绍Spring BeanFactory 和 FactoryBean区别

m0_66220639的博客 994

【spring】BeanFactory与FactoryBean的区别

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

叁滴水 的博客 4302

Spring之BeanFactory和FactoryBean接口的区别

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

波波烤鸭的博客 6106

Spring BeanFactory与FactoryBean的区别

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

曰业而安的博客 1421

【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的博客 1730

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,ApplicationContext的区别

Spring中BeanFactory, FactoryBean,ApplicationContext的区别

果酱 の 博客 1133

Spring BeanFactory 与 FactoryBean的区别

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

@Bean 798
上一篇: JAVA获取时间戳,哪个更快
下一篇: Spring:源码解读Spring IOC原理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值