创建一个类A

public class A {
}

创建一个类MyFactoryBean,并实现FactoryBean接口

public class MyFactoryBean implements FactoryBean<A> {@Overridepublic A getObject() throws Exception {return new A();}@Overridepublic Class<?> getObjectType() {return A.class;}@Overridepublic boolean isSingleton() {return false;// 注意这里,参考下面的main方法}
}

下面的main方法测试,打印两次内容不一样,因为isSingleton返回false,如果把isSingleton方法返回true,则上面两次打印则相同

public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyFactoryBean.class);A a = ctx.getBean(A.class);System.out.println(a);a = ctx.getBean(A.class);System.out.println(a);
}

上述代码是根据类型获取对象A,如果想根据名称获取对象A,则代码如下

public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyFactoryBean.class);Object a = ctx.getBean("myFactoryBean");System.out.println(a);
}

如果想根据名称从spring容器中获取MyFactoryBean实例,而不是A实例,则
名称前面需加"&"符号,代码如下

public static void main(String[] args) throws Exception {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyFactoryBean.class);Object a = ctx.getBean("&myFactoryBean");System.out.println(a);
}

关于FactoryBean使用方法到此就结束了,挺简单的,具体原理是在org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean方法中,调用了getObjectForBeanInstance方法,而这个方法,又调用了最终实现方法:org.springframework.beans.factory.support.FactoryBeanRegistrySupport#getObjectFromFactoryBean,可以看到最终实现是在FactoryBeanRegistrySupport类中的,下面是它的类图

Spring-beans-FactoryBean相关推荐

  1. spring beans源码解读之--总结篇

    spring beans下面有如下源文件包: org.springframework.beans, 包含了操作java bean的接口和类. org.springframework.beans.ann ...

  2. Spring 利用FactoryBean来配置Bean

    Spring 利用FactoryBean来配置Bean 在之前的 博文 已经介绍可以利用java反射机制 和 工厂方法(Factory Method)的方法来在bean config file里 配置 ...

  3. Spring源码系列- Spring Beans - 核心类的基本介绍

    Spring源码系列- Spring Beans - 核心类的基本介绍 读过上一篇文章的读者应该都能对Spring的体系结构有一个大致的了解,在结尾处,我也说过会从spring-beans包开始分析, ...

  4. spring beans源码解读之--Bean的注解(annotation)

    随着spring注解的引入,越来越多的开发者开始使用注解,这篇文章将对注解的机制进行串联式的讲解,不求深入透彻,但求串起spring beans注解的珍珠,展示给大家. 1. spring beans ...

  5. Java面试题2019简书_2019最新Spring面试题大全含答案之Spring Beans(2019最全Spring超级葵花宝典)...

    1.什么是Spring beans? Spring beans 是那些形成Spring应用的主干的java对象.它们被Spring IOC容器初始化,装配,和管理.这些beans通过容器中配置的元数据 ...

  6. java中factory_Java后台面试--Spring中FactoryBean与BeanFactory的使用及区别

    以前刚转Java的时候去面试被问到过Spring中FactoryBean与BeanFactory的使用及区别,由于之前没有重视这两个的区别,只是在配置文件里面加bean结点并通过注解的形式调用,所以被 ...

  7. springboot线程中获取spring beans

    线程中无法直接使用注解的方式获取spring beans,但是线程经常需要用到bean来实现业务流程;这里有两种方式 方法1:是通过初始化线程实现类的方式通过set私有属性,把bean赋值到线程实现类 ...

  8. Managing Spring beans with JMX

    文章目录 This chapter covers Exposing Spring beans as managed beans 将Spring bean暴露为MBean Remotely managi ...

  9. spring beans源码解读之--BeanFactory的注册

    beanFactory的继承关系如下图所示: (图片来源:http://www.myexception.cn/software-architecture-design/925888.html) 在上节 ...

  10. spring beans源码解读之--BeanFactory进化史

    BeanFactory是访问bean容器的根接口,它是一个bean容器的基本客户端视图. 先让我们看看beanfactory的前生后世吧! beanFactory有四个重要的子接口: SimpleJn ...

最新文章

  1. python封装api linux_python Socket编程-python API 与 Linux Socket API之间的关系
  2. 基于ESP32智能车竞赛比赛系统硬件初步调试-5-6
  3. const 与 static readonly 的区别
  4. Windows 10 系统版本更新历史
  5. -XX:+UseParallelGC与 -XX:+UseParNewGC相关介绍
  6. Django-安装xadmin的方法及主要配置方法
  7. 有了这个王座,写代码的速度都加快了
  8. ie调试html代码,IE下的调试工具IE WebDeveloper
  9. MySQL索引设计与EXPLAIN
  10. nicelabel java_EditPlus
  11. ElasticSearch(十二):Spring Data ElasticSearch 的使用(二)
  12. 实战:Longhorn存储-2022.2.24
  13. 【定位问题】基于matlab chan算法、fang算法、taylor算法求解目标定位问题【含Matlab源码 2135期】
  14. 按键精灵-UI配置丢失问题解决办法
  15. MMC、SD、TF、SDIO、SDMMC简介
  16. 排序算法《一》冒泡排序
  17. 2020-12-22
  18. mp3 pcm java_Java mp3转码pcm 与 切割音频
  19. html5程序 pdf,jsPDF – 基于 HTML5 的强大 PDF 生成工具
  20. thinkph5.1 + es

热门文章

  1. java进行图片和字符串的互相转换
  2. Python 项目中requirements.txt依赖文件的使用
  3. fastapi 的启动方式
  4. 由于找不到appvisvsubsystems32.dll_终于熬到孩子上幼儿园,宝妈却找不到工作了,背后原因让人心酸...
  5. jtopo绘图帧数与cpu使用率
  6. android 广告close,小程序广告弹出与关闭
  7. 计算机网络滑动窗口机制编程,计算机网络之滑动窗口机制
  8. jquery获取加载的html内容,jquery 获取ajax加载的html中部分内容
  9. ue4模型为啥这么亮_坐好了,仔细听,资深建模师介绍UE4视口中的可视化模式(一)...
  10. 小程序监听点击右上角按钮_朋友圈支持应用直达、公众号小程序支持行动按钮文案、原生页拉取...