📢📢📢📣📣📣
哈喽!大家好,我是【一心同学】,一位上进心十足的【Java领域博主】!😜😜😜
✨【一心同学】的写作风格:喜欢用【通俗易懂】的文笔去讲解每一个知识点,而不喜欢用【高大上】的官方陈述。
✨【一心同学】博客的领域是【面向后端技术】的学习,未来会持续更新更多的【后端技术】以及【学习心得】。
✨如果有对【后端技术】感兴趣的【小可爱】,欢迎关注【一心同学】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
目录
一、介绍
1.1普通Bean和工厂Bean
在Spring中有两种类型bean,一种普通bean,另外一种工厂bean(FactoryBean)
1、普通bean:在配置文件中定义bean类型就是返回类型
2、工厂bean:在配置文件定义bean类型可以和返回类型不一样
1.2 为什么需要FactoryBean?
一般情况下,Spring通过反射机制利用<bean>的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的xml方式,则需要在<bean>中提供大量的配置信息,这就会导致XML的配置灵活性受限。而自定义FactoryBean的出现则可以解决这个问题。
这个时候我们就可以通过自定义一个FactoryBean,然后通过xml简单结合FactoryBean来创建我们所需要的Bean。
1.3 FactoryBean的作用
作用从名称上也能大概知道它的作用就是起一个工厂作用,就是使用了工厂模式,封装了创建对象的复杂过程,当所要创建的对象有复杂实例化过程代码,官网就推荐使用自定义FactoryBean的方式,把这个自定义的FactoryBean注入到容器中。
故归结为一句话:FactoryBean可以创建实例化过程比较复杂的Bean
二、使用
第一步 创建类,让这个类作为工厂bean,实现接口 FactoryBean,并重写其方法,定义返回的bean类型
package com.yixin.factoryBean;
import com.yixin.dao.Book;
import org.springframework.beans.factory.FactoryBean;
public class MyBean implements FactoryBean<Book> {
public Book getObject() throws Exception {
//创建Bean
Book book = new Book();
book.setId(66);
book.setName("《算法》");
return book;
}
public Class<?> getObjectType() {
return null;
}
public boolean isSingleton() {
return false;
}
}
第二步 进行XML配置绑定
<bean id="myBean" class="com.yixin.factoryBean.MyBean"/>
测试:
@Test
public void test2(){
//解析bean3.xml文件 , 生成管理相应的Bean对象
ApplicationContext context = new ClassPathXmlApplicationContext("bean3.xml");
//getBean : 参数即为spring配置文件中bean的id .
Book book=context.getBean("myBean",Book.class);
System.out.println(book);
}
输出:
Book{id=66, name='《算法》'}
结语
以上就是【一心同学】对一个自定义FactoryBean的简单实现了,注意其的使用场合:当要创建的对象有复杂实例化过程代码时,再使用FactoryBean就可以大大提升我们的开发效率。