BeanFactory:是Spring的一个工厂它能够得到Spring工厂给创建的Bean,能通过getBean()方法获得。

FactoryBean:是一个特殊的Bean,Spring管理它的时候会对实现这个接口的类前面加一个(&)字符。而它的名字则是表示getObject中得到的Bean。主要的作用是别的Bean属性或者依赖太多的情况下,都可以通过FactoryBean生成不太容易的Bean,然后对外提供简单化的Bean

public class TempDaoFactoryBean {public void test(){System.out.println("bean");}
}
/*** 如果你的类实现了FactoryBean* 那么Spring容器中会存在两个对象* 一个是getObject返回的对象* 一个是当前对象** getObject得到的名字是当前类指定的名字,也就是Spring中daoFactoryBean对应的对象** 当前对象是当前类的名字是“&”+当前类的名字** */
@Component("daoFactoryBean")
public class DaoFactoryBean implements FactoryBean {public void testBean(){System.out.println("testBean");}public Object getObject() throws Exception {return new TempDaoFactoryBean();}public Class<?> getObjectType() {return null;}public boolean isSingleton() {return false;}
}

依赖关系比较复杂的时候可以使用FactoryBean,例如SqlSessionFactoryBean,就是使用的Factory这种模式,对外进行简化它的庞大资源配置的。

简单一个例子来模拟庞大的复杂关系

package com.FactoryBeanPackage;import org.springframework.beans.factory.FactoryBean;public class DaoFactoryBean implements FactoryBean {private String msg;public void setMsg(String msg) {this.msg = msg;}public void testBean(){System.out.println("testBean");}public Object getObject() throws Exception {TempDaoFactoryBean temp=new TempDaoFactoryBean();String msgArrags[]=msg.split(",");temp.setMsg(msgArrags[0]);temp.setMsg2(msgArrags[1]);temp.setMsg3(msgArrags[2]);return temp;}public Class<?> getObjectType() {return null;}public boolean isSingleton() {return false;}
}
package com.FactoryBeanPackage;public class TempDaoFactoryBean {private String msg;private String msg2;private String msg3;public void setMsg(String msg) {this.msg = msg;}public void setMsg2(String msg2) {this.msg2 = msg2;}public void setMsg3(String msg3) {this.msg3 = msg3;}public String getMsg() {return msg;}public String getMsg2() {return msg2;}public String getMsg3() {return msg3;}public void test(){System.out.println("bean");}
}
package com.FactoryBeanPackage;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext act=new AnnotationConfigApplicationContext(SpringDaoFactoryConfig.class);TempDaoFactoryBean daoFactoryBean= (TempDaoFactoryBean) act.getBean("daoFactor");System.out.println(daoFactoryBean.getMsg());}
}
package com.FactoryBeanPackage;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;@Configuration
@ComponentScan(value = "com.FactoryBeanPackage")
@ImportResource("classpath:spring.xml")
public class SpringDaoFactoryConfig {
}

spring FactoryBean的知识应用和Beanfactory的区别相关推荐

  1. Spring Boot 核心知识,深入剖析!

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 来源:http://uee.me/c3dFf 在过去两三年 ...

  2. Spring源码篇一之beanFactory的真身和6大后置处理器的注册

    当你的才华还撑不起你的野心的时候,唯有静下心来学习. spring运行流程图(https://www.processon.com/view/5f3fcab8e0b34d07118258cb?fromn ...

  3. 深入学习Spring(理论知识部分)

    文章目录 前言 BeanDefinition 什么是BeanDefinition BeanDefinition中重要的属性 BeanFactory 什么是BeanFactory BeanDefinit ...

  4. 2021 版 Spring Boot 基础知识复习手册(2w字,建议收藏)

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...

  5. spring的基本知识

    首先是回顾一下spring的基本知识 1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@compon ...

  6. Spring框架中ApplicationContext与BeanFactory的区别

    前言 Spring框架中ApplicationContext与BeanFactory的区别.其中,BeanFactory为ApplicationContext的父类,是一种继承关系,Applicati ...

  7. spring的冷门知识

    spring的冷门知识储蓄

  8. Spring中SmartLifecycle和Lifecycle的作用和区别

    欢迎关注方志朋的博客,回复"666"获面试宝典 本文基于SpringBoot 2.5.0-M2讲解Spring中Lifecycle和SmartLifecycle的作用和区别,以及如 ...

  9. 框架:Spring Aop、拦截器、过滤器的区别

    Spring Aop.拦截器.过滤器的区别 Filter过滤器:拦截web访问的url地址. Interceptor拦截器:拦截以.action结尾的url,拦截Action的访问. Spring A ...

最新文章

  1. excel2010设置列宽为像素_excel图表制作技巧:条件格式制作像素图表
  2. Nginx的HTTP负载平衡
  3. linux 从github拉取更新_关于拉取请求
  4. VS返回到上次编辑和进入到下次编辑的位置快捷键
  5. 数字积分法插补c语言程序,数字积分法插补原理
  6. Android 10 重磅来袭:支持 5G 与折叠屏、隐私安全全面升级!
  7. jQuery控制网页字体大小
  8. 2020最新Ubutu18.04安装NVIDIA出现如下报错解决方法[亲测可用]
  9. mc服务器资源包在什么文件夹,教程/制作资源包 _ 《我的世界》中文Minecraft Wiki:最详细的官方我的世界百科...
  10. 如何求绝对值最小的数
  11. 什么是resultful 以及为什么要使用它
  12. uClinux操作系统移植
  13. modbus slave和modbus poll使用说明
  14. PACS(CT、CR、DR、MR、DSA、RF医院影像管理系统源码)
  15. SV中virtual作用
  16. 报错Error from chokidar (C:\): Error: EBUSY: resource busy or locked, lstat ‘C:\hiberfil.sys‘
  17. win2K3安装sql2000提示“安装程序配置服务器失败”的常见解决办法
  18. hashmap中的key是有序的么_hashmap 是无序的但是实际输出有序。
  19. Redboot安装历程
  20. webgl纹理贴图机制

热门文章

  1. 恶补各种知识(操作系统篇)
  2. ES6_入门(3)_顶层对象属性
  3. Linux 学习_ssh(secure shell)
  4. How to start MySQL on Linux
  5. iOS隐藏键盘的几种方式
  6. 【struts2】struts2配置文件—struts.xml
  7. Centos7 - mysql 5.5.62 tar.gz 方式安装
  8. 【译】 WebSocket 协议第六章——发送与接收消息(Sending and Receiving Data)
  9. Java 读取 .properties 配置文件的几种方式
  10. IIS服务中五种身份验证的灵活运用-转