FactoryBean解读
FactoryBean解读
FactoryBean介绍
在Spring中有两种类型的bean,一种是普通Bean,一种是工厂Bean,即FactoryBean。
FactoryBean是一个工厂Bean,创建的bean是getObject方法返回的对象。一般用于创建比较复杂的bean。
当实例化Bean过程比较复杂,按照传统的方式,需要在<bean>
中提供大量的配置信息。配置方法的灵活性受限,这时采用编码方式可能会得到一个简单的方案。这时spring官方提供了FactoryBean来解决这个问题。用户有实现FactoryBean即可按Java的编程逻辑去实现负责bean的实例化操作。
FactoryBean源码
FactoryBean接口没什么特别,主要是如何实现接口
public interface FactoryBean<T> {
String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";
//获取bean对象
@Nullable
T getObject() throws Exception;
//bean对象的类型
@Nullable
Class<?> getObjectType();
//生产的bean是否为单例
default boolean isSingleton() {
return true;
}
}
FactoryBean使用例子
public class UserFactoryBean implements FactoryBean<User> {
@Override
public User getObject() throws Exception {
return new User();
}
@Override
public Class<?> getObjectType() {
return User.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
在application.xml中注册一个UserFactoryBean
<bean id="userFactory" class="com.yaliyao.pojo.testBeanPojo.UserFactoryBean"/>
测试
@Test
public void testFactoryBean(){
XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(new ClassPathResource("application.xml"));
User user1 = xmlBeanFactory.getBean(User.class);
User user2 = xmlBeanFactory.getBean(User.class);
Object user3 = xmlBeanFactory.getBean("userFactory");
//要获取FactoryBean本身,要在前面加&
Object userFactory = xmlBeanFactory.getBean("&userFactory");
System.out.println(user1);
System.out.println(user2);
System.out.println(user3);
System.out.println(userFactory);
System.out.println(user1==user2);
}
结果
User(id=0, username=null, password=null)
User(id=0, username=null, password=null)
User(id=0, username=null, password=null)
com.yaliyao.pojo.testBeanPojo.UserFactoryBean@77846d2c
false
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)