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

FactoryBean接口作用

         FactoryBean是一个生产Bean产品的工厂,它是一个接口,只要实现了这个接口就可以生产Bean.

package com.xuecheng.content.a01;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;/*** @author zhou* @version 1.0* @description TODO* @date 2025/8/27 22:29*/
@Slf4j
@Component("bean1")
public class MyFactoryBean implements FactoryBean {//提供产品对象@Overridepublic Object getObject() throws Exception {Bean1 bean1 = new Bean1();log.debug("creating bean: {}",bean1);return bean1;}//决定了根据类型获取或依赖注入能否成功@Overridepublic Class<?> getObjectType() {return Bean1.class;}@Overridepublic boolean isSingleton() {//单例return true;}
}

实现这个接口需要重写上面三个方法。

1.getObject()返回实体

2.getObjectType()返回实体的类型

3.isSingleton()决定生产的Bean对象是否是单例

对FactoryBean类进行测试:

首先创建Bean1

package com.xuecheng.content.a01;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.annotation.Autowired;import javax.annotation.PostConstruct;/*** @author zhou* @version 1.0* @description TODO* @date 2025/8/27 22:30*/
@Slf4j
public class Bean1 implements BeanFactoryAware {private Bean2 bean2;@Autowiredpublic void setBean2(Bean2 bean2){this.bean2 = bean2;}public Bean2 getBean2(){return bean2;}@PostConstructpublic void init(){log.debug("init");}@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {log.debug("setBeanFactory{}",beanFactory);}
}

         Bean1(没有被Spring管理)里面依赖了Bean2,并把Bean2交给Spring管理,方便后期测试,同时实现BeanFactoryAware 接口,设置Bean1的BeanFactory。

package com.xuecheng.content.a01;import org.springframework.stereotype.Component;/*** @author zhou* @version 1.0* @description TODO* @date 2025/8/27 22:35*/
@Component
public class Bean2 {
}

package com.xuecheng.content.a01;import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;/*** @author zhou* @version 1.0* @description TODO* @date 2025/8/27 22:49*/
@ComponentScan
public class TestFactoryBean {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TestFactoryBean.class);Bean1 bean1 = (Bean1) context.getBean("bean1");System.out.println(bean1);context.close();}
}

        把测试类交给Spring管理,我们通过容器获取名字为bean1的bean。容器从BeanFactory里面拿到了bean1。

测试结果:

            Bean1被创建,但是没有做Bean1中写的一些初始化的操作。

http://www.dtcms.com/a/352923.html

相关文章:

  • 基于高德地图的怀化旅发精品路线智能规划导航之旅
  • 排放情报平台:驱动绿色未来的技术引擎
  • 优选算法-常见位运算总结
  • 分布式系统架构设计与一致性协议深度解析
  • 深入解析 Chromium Mojo IPC:跨进程通信原理与源码实战
  • 【Qt开发】常用控件(七)-> styleSheet
  • 激活函数只是“非线性开关”?ReLU、Sigmoid、Leaky ReLU的区别与选择
  • Linux 的 git 更换项目仓库源地址
  • 数据对话的“通用语法”:SQL与KingbaseES的智能处理艺术
  • 高并发内存池(11)-PageCache获取Span(下)
  • 【Hadoop】Zookeeper、HBase、Sqoop
  • 寄存器的原理
  • 边缘计算:一场由物理定律发起的“计算革命”
  • leetcode算法刷题的第十九天
  • 如何在Ubuntu中启用有线网
  • DolphinScheduler安装配置教程(超级详细)
  • 吉比特(雷霆游戏)前端二面问题总结
  • 骰子滚出最大和
  • 往来港澳台地区通行证件识读的应用案例
  • 艾体宝新闻 | 98%好评率!KnowBe4 连续5年蝉联第一,现开放免费钓鱼测试等你解锁
  • 查询窗口输入“ 188 8888 8888 “这种前后、中间都带空格的电话号码的处理方式
  • 目前3D打印机槽点网络汇总, 个人提可改进项, 可颠覆性方向,公开
  • AI需求优先级:数据价值密度×算法成熟度
  • CentCentOS7-OPenStack-Trian版搭建
  • 经典聚类算法讲解:K-means 和 DBSCAN
  • 实战原型模式案例
  • 【Chrome 扩展】chrome自动升级后 Switchomega扩展不支持了怎么办
  • Transformer实战(15)——使用PyTorch微调Transformer语言模型
  • centos 判断一个对象是文件还是文件夹
  • HarmonyOS 高效数据存储全攻略:从本地优化到分布式实战