当前位置: 首页 > news >正文

Spring之【详解FactoryBean】

目录

FactoryBean接口

通过FactoryBean创建Bean对象

如何获取FactoryBean中getObject方法创建的Bean

如何获取FactoryBean本身

源码分析

beanDefinitionMap

singletonObjects

factoryBeanObjectCache

FACTORY_BEAN_PREFIX

BeanFactory

BeanFactoryUtils#isFactoryDereference

看看Spring自己是怎么获取FactoryBean对象


FactoryBean接口

提供了三个方法

  • 方法一:返回由工厂管理的Bean实例对象

  • 方法二:返回Bean实例对象的类型

  • 方法三:Bean是否为单例,默认为单例

通过FactoryBean创建Bean对象

  • 定义一个普通的Java类
package spring.demo;public class Cat {
}
  • 定义一个组件实现FactoryBean接口
package spring.demo;import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;@Component
public class CatFactoryBean implements FactoryBean<Cat> {@Overridepublic Cat getObject() throws Exception {return new Cat();}@Overridepublic Class<?> getObjectType() {return Cat.class;}@Overridepublic boolean isSingleton() {return true;}
}

如何获取FactoryBean中getObject方法创建的Bean

通过beanName获取

package spring.demo;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class AppMain {public static void main(String[] args) {// 容器启动AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);// 通过beanName获取Object bean = applicationContext.getBean("catFactoryBean");System.out.println(bean);}
}

如何获取FactoryBean本身

通过&+beanName获取

package spring.demo;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class AppMain {public static void main(String[] args) {// 容器启动AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);// 通过&+beanName获取Object bean = applicationContext.getBean("&catFactoryBean");System.out.println(bean);}
}

源码分析

beanDefinitionMap

singletonObjects

factoryBeanObjectCache

FACTORY_BEAN_PREFIX

BeanFactory

BeanFactoryUtils#isFactoryDereference

看看Spring自己是怎么获取FactoryBean对象

http://www.lryc.cn/news/611314.html

相关文章:

  • 深度学习-卷积神经网络CNN-填充与步幅
  • 27-数据仓库与Apache Hive-2
  • 二维树状数组
  • 机器学习之线性回归与逻辑回归
  • 广州客户 戴尔R720服务器 liunx系统 RAID5无损升级扩容
  • 【递归完全搜索】USACO Bronze 2023 January - 牛栏降温 IIAir Cownditioning II
  • WordPress如何实现隐藏文章部分内容?WordPress无法解析[hide]...[/hide]这类短代码怎么办?
  • 深度清理C盘!adsC盘清理大师实现原理与技术解析
  • 2025《艾诺提亚失落之歌》逆向工程解包尝试
  • 一个小巧神奇的 USB数据线检测仪
  • SpringCloud学习-------Feign详解
  • PageHelper分页插件
  • makefile使用及双向链表
  • 在X86架构Linux中创建虚拟根目录并下载指定架构(如aarch64)的软件包(含依赖)
  • 数字图像处理(冈萨雷斯)第三版:第四章——频率域滤波(学前了解知识)——主要内容和重点
  • 深信服GO面试题及参考答案(下)
  • 数据结构基础:链表(2)——双向链表、循环链表、内核链表
  • GoLand 项目从 0 到 1:第五天 —— 角色权限中间件实现与事务控制
  • 前端工程化:Vue3(二)
  • 贝叶斯统计从理论到实践
  • 自动牙龈边缘识别软件设计与实现
  • Android AppSearch 深度解析:现代应用搜索架构与实践
  • 消息队列疑难问题(RocketMQ)
  • 认识爬虫 —— bs4提取
  • 阿里招AI产品运营
  • 永磁同步电机的矢量控制
  • RK3568下使用Qt 绘制实现实时坐标曲线
  • 【Spring Cloud】-- 注册中心
  • PowerShell 入门2: 使用帮助系统
  • 异或游戏 运算符优先级问题