Spring-beans-FactoryBean
创建一个类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相关推荐
- spring beans源码解读之--总结篇
spring beans下面有如下源文件包: org.springframework.beans, 包含了操作java bean的接口和类. org.springframework.beans.ann ...
- Spring 利用FactoryBean来配置Bean
Spring 利用FactoryBean来配置Bean 在之前的 博文 已经介绍可以利用java反射机制 和 工厂方法(Factory Method)的方法来在bean config file里 配置 ...
- Spring源码系列- Spring Beans - 核心类的基本介绍
Spring源码系列- Spring Beans - 核心类的基本介绍 读过上一篇文章的读者应该都能对Spring的体系结构有一个大致的了解,在结尾处,我也说过会从spring-beans包开始分析, ...
- spring beans源码解读之--Bean的注解(annotation)
随着spring注解的引入,越来越多的开发者开始使用注解,这篇文章将对注解的机制进行串联式的讲解,不求深入透彻,但求串起spring beans注解的珍珠,展示给大家. 1. spring beans ...
- Java面试题2019简书_2019最新Spring面试题大全含答案之Spring Beans(2019最全Spring超级葵花宝典)...
1.什么是Spring beans? Spring beans 是那些形成Spring应用的主干的java对象.它们被Spring IOC容器初始化,装配,和管理.这些beans通过容器中配置的元数据 ...
- java中factory_Java后台面试--Spring中FactoryBean与BeanFactory的使用及区别
以前刚转Java的时候去面试被问到过Spring中FactoryBean与BeanFactory的使用及区别,由于之前没有重视这两个的区别,只是在配置文件里面加bean结点并通过注解的形式调用,所以被 ...
- springboot线程中获取spring beans
线程中无法直接使用注解的方式获取spring beans,但是线程经常需要用到bean来实现业务流程;这里有两种方式 方法1:是通过初始化线程实现类的方式通过set私有属性,把bean赋值到线程实现类 ...
- Managing Spring beans with JMX
文章目录 This chapter covers Exposing Spring beans as managed beans 将Spring bean暴露为MBean Remotely managi ...
- spring beans源码解读之--BeanFactory的注册
beanFactory的继承关系如下图所示: (图片来源:http://www.myexception.cn/software-architecture-design/925888.html) 在上节 ...
- spring beans源码解读之--BeanFactory进化史
BeanFactory是访问bean容器的根接口,它是一个bean容器的基本客户端视图. 先让我们看看beanfactory的前生后世吧! beanFactory有四个重要的子接口: SimpleJn ...
最新文章
- python封装api linux_python Socket编程-python API 与 Linux Socket API之间的关系
- 基于ESP32智能车竞赛比赛系统硬件初步调试-5-6
- const 与 static readonly 的区别
- Windows 10 系统版本更新历史
- -XX:+UseParallelGC与 -XX:+UseParNewGC相关介绍
- Django-安装xadmin的方法及主要配置方法
- 有了这个王座,写代码的速度都加快了
- ie调试html代码,IE下的调试工具IE WebDeveloper
- MySQL索引设计与EXPLAIN
- nicelabel java_EditPlus
- ElasticSearch(十二):Spring Data ElasticSearch 的使用(二)
- 实战:Longhorn存储-2022.2.24
- 【定位问题】基于matlab chan算法、fang算法、taylor算法求解目标定位问题【含Matlab源码 2135期】
- 按键精灵-UI配置丢失问题解决办法
- MMC、SD、TF、SDIO、SDMMC简介
- 排序算法《一》冒泡排序
- 2020-12-22
- mp3 pcm java_Java mp3转码pcm 与 切割音频
- html5程序 pdf,jsPDF – 基于 HTML5 的强大 PDF 生成工具
- thinkph5.1 + es
热门文章
- java进行图片和字符串的互相转换
- Python 项目中requirements.txt依赖文件的使用
- fastapi 的启动方式
- 由于找不到appvisvsubsystems32.dll_终于熬到孩子上幼儿园,宝妈却找不到工作了,背后原因让人心酸...
- jtopo绘图帧数与cpu使用率
- android 广告close,小程序广告弹出与关闭
- 计算机网络滑动窗口机制编程,计算机网络之滑动窗口机制
- jquery获取加载的html内容,jquery 获取ajax加载的html中部分内容
- ue4模型为啥这么亮_坐好了,仔细听,资深建模师介绍UE4视口中的可视化模式(一)...
- 小程序监听点击右上角按钮_朋友圈支持应用直达、公众号小程序支持行动按钮文案、原生页拉取...