【Spring】FactoryBean

(181条消息) FactoryBean详解_MiaSanMiaRL的博客-CSDN博客_factorybean

FactoryBean也叫做Bean工厂,是用于生产Bean对象的类

FactoryBean的使用
首先我们要明确,FactoryBean也是一个Bean对象。我们如果要使用Bean工厂,可以手动实现一个实现FactoryBean接口的一个类。

@Component
public class FactoryBean_test implements FactoryBean {
@Override
public Object getObject() throws Exception {
return new User();
}

@Override
public Class<?> getObjectType() {
return User.class;
}
}
1、@Component:首先我们的Bean工厂由于也是对象的一种,所以我们要把它注册进Spring容器中

2、我们实现了FactoryBean接口

public interface FactoryBean<T> {
String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";

@Nullable
T getObject() throws Exception;

@Nullable
Class<?> getObjectType();

default boolean isSingleton() {
return true;
}
}
该接口有三个方法,其中isSingleton方法用来判断生产的Bean是不是单例的,默认实现,我们不需要手动实现。

我们需要实现getObject方法获得生产出来的Bean对象;同时还要实现getObjectType方法用于获取生产出来对象的类

使用:
在main方法中,我们依然用前面提到的方法获取Bean对象

//获取BeanDefinition对象
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
//简单的创建一个Bean
beanDefinition.setBeanClass(FactoryBean_test.class);
AnnotationConfigApplicationContext applicationContext1 = new AnnotationConfigApplicationContext();
//将BeanDefinition创建到容器对象里面去
applicationContext1.registerBeanDefinition("user",beanDefinition);
//注意:此时我们注册进Spring中的Bean有些特殊,他实现了两个实际上创建了两个Bean对象,第一个就是我们的FactoryBean_teat,
//还有一个就是我们的User对象
//此时id:&user表示的是FactoryBean_teat,id:user表示的是User对象。
注意:
我们此时传入的BeanDefinition对象会有点特殊,因为它实际上会注册进两个Bean对象,一个是我们的工厂对象,另一是我们生产出来的对象。

//获取生产出来的对象
User user1 = applicationContext1.getBean("user",User.class);
//获取工厂对象
FactoryBean_test factoryBean_test = applicationContext1.getBean("&user",FactoryBean_test.class);

posted @   忱康  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示