1 BeanFactory 是ioc容器的底层实现接口,是ApplicationContext 顶级接口

spring不允许我们直接操作 BeanFactory  bean工厂,所以为我们提供了ApplicationContext 这个接口 此接口集成BeanFactory 接口,ApplicationContext包含BeanFactory的所有功能,同时还进行更多的扩展。

BeanFactory  接口又衍生出以下接口,其中我们经常用到的是ApplicationContext 接口

ApplicationContext 继承图

CongihuableApplicationContext 中添加了一些方法:

... 其他省略

    //刷新ioc容器上下文
void refresh() throws BeansException, IllegalStateException; // 关闭此应用程序上下文,释放所有资源并锁定,销毁所有缓存的单例bean。
@Override
void close(); //确定此应用程序上下文是否处于活动状态,即,是否至少刷新一次且尚未关闭。
boolean isActive(); ... 其他省略

主要作用在ioc容器进行相应的刷新,关闭等操作!

FileSystemXmlApplicationContext 和ClassPathXmlApplicationContext 是用来读取xml文件创建bean对象
ClassPathXmlApplicationContext : 读取类路径下xml 创建bean
FileSystemXmlApplicationContext :读取文件系统下xml创建bean
AnnotationConfigApplicationContext 主要是注解开发获取ioc中的bean实例

2 FactoryBean 是spirng提供的工厂bean的一个接口

FactoryBean 接口提供三个方法,用来创建对象,

FactoryBean 具体返回的对象是由getObject 方法决定的。

*/
public interface FactoryBean<T> { //创建的具体bean对象的类型
@Nullable
T getObject() throws Exception; //工厂bean 具体创建具体对象是由此getObject()方法来返回的
@Nullable
Class<?> getObjectType(); //是否单例
default boolean isSingleton() {
return true;
} }

创建一个FactoryBean 用来生产User对象

@Component
public class FactoryBeanTest implements FactoryBean<User> { //创建的具体bean对象的类型
@Override
public Class<?> getObjectType() {
return User.class;
} //是否单例
@Override
public boolean isSingleton() {
return true;
} //工厂bean 具体创建具体对象是由此getObject()方法来返回的
@Override
public User getObject() throws Exception {
return new User();
}
}

Junit测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {FactoryBeanTest.class})
@WebAppConfiguration
public class SpringBootDemoApplicationTests {
@Autowired
private ApplicationContext applicationContext; @Test
public void tesst() {
FactoryBeanTest bean1 = applicationContext.getBean(FactoryBeanTest.class);
try {
User object = bean1.getObject();
System.out.println(object==object);
System.out.println(object);
} catch (Exception e) {
e.printStackTrace();
}
}
}

结果

true
User [id=null, name=null, age=0]

简单的总结:

BeanFactory是个bean 工厂,是一个工厂类(接口), 它负责生产和管理bean的一个工厂
是ioc 容器最底层的接口,是个ioc容器,是spring用来管理和装配普通bean的ioc容器(这些bean成为普通bean)。
FactoryBean是个bean,在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式,是一个可以生产对象和装饰对象的工厂bean,由spring管理后,
生产的对象是由getObject()方法决定的(从容器中获取到的对象不是
“ FactoryBeanTest ” 对象)。

Spring FactoryBean和BeanFactory 区别的更多相关文章

  1. Spring之BeanFactory和FactoryBean接口的区别

    目录 一.BeanFactory接口 二.FactoryBean接口 1.简单实现 2.增强实现 3.FactoryBean的实际使用案例 三.总结 @   Spring框架中的BeanFactory ...

  2. Spring中的BeanFactory与FactoryBean看这一篇就够了

    前言 理解FactoryBean是非常非常有必要的,因为在Spring中FactoryBean最为典型的一个应用就是用来创建AOP的代理对象,不仅如此,而且对理解Mybatis核心源码也非常有帮助!如 ...

  3. Spring高级特性之四:FactoryBean和BeanFactory

    FactoryBean和BeanFactory两只是两个单词顺序不同但是内容大不相同.落脚点在后面一个单词,前面一个单词是其功能描述:FactoryBean--工厂bean,一个建工厂的bean?Be ...

  4. 一文带你解读Spring5源码解析 IOC之开启Bean的加载,以及FactoryBean和BeanFactory的区别。

    前言 通过往期的文章我们已经了解了Spring对XML配置文件的解析,将分析的信息组装成BeanDefinition,并将其保存到相应的BeanDefinitionRegistry中,至此Spring ...

  5. Spring @Configuration 和 @Component 区别

    Spring @Configuration 和 @Component 区别 一句话概括就是 @Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个 ...

  6. 转:Spring系列之beanFactory与ApplicationContext

    原文地址:Spring系列之beanFactory与ApplicationContext 一.BeanFactoryBeanFactory 是 Spring 的“心脏”.它就是 Spring IoC ...

  7. 转:Spring FactoryBean源码浅析

    http://blog.csdn.net/java2000_wl/article/details/7410714 在Spring BeanFactory容器中管理两种bean 1.标准Java Bea ...

  8. Spring与SpringMVC的区别

    Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring. 简单点的话可以将SpringMVC类比于Strut ...

  9. spring 简单实现BeanFactory(转)

    原文地址: http://blog.csdn.net/mlc1218559742/article/details/52776160 有没有发现上面的代码与利用反射实现工厂模式的代码很相似.对,你没有看 ...

随机推荐

  1. layui中的多图上传

    效果展示: 1.html部分: 注:<input> 作为隐藏域,用于保存多图上传的资源数组,方便后期进行 form 表单的提交 <input type="hidden&qu ...

  2. Postman报文进行解密之RSA私钥解密

    接口返回的数据也是加密的,需要对数据解密才能看到返回的数据是否正确,就需要用RSA解密. 返回数据的解析可以在postman的Tests进行后置处理,获取加密后的返回数据: var data = JS ...

  3. 【Web前端HTML5&CSS3】05-样式继承与其他概念

    笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版 目录 样式继承与其他概念 1. 继承 2. 选择器的权重 3. 长度单位 像素 屏幕分辨率 图像分辨率 百分比 em ...

  4. Zoho Projects助力企业项目高效管理

    挑选项目管理工具,就和人买衣服.买鞋子是一样的,除了看外观,最重要的是合适.随着项目管理工具的不断发展,市面上有很多工具都非常优秀,也能解决企业.团队的实际需求. 对于项目管理来说,最重要的在于人员协 ...

  5. Java容器 | 基于源码分析Map集合体系

    一.容器之Map集合 集合体系的源码中,Map中的HashMap的设计堪称最经典,涉及数据结构.编程思想.哈希计算等等,在日常开发中对于一些源码的思想进行参考借鉴还是很有必要的. 基础:元素增查删.容 ...

  6. [BD] Hive

    简介 基于HDFS的数据仓库工具 基于HDFS上的数据分析引擎 2.x 前:SQL -----> Hive  ----> MapReduce 2.x 后:推荐执行引擎为 Spark 支持S ...

  7. 使用chrony安装chrony

      yum install chrony -y   使用chrony安装chrony 使用root用户登录~]# yum install chrony 默认的chrony进程位置/usr/sbin/c ...

  8. 用于监视Linux上的内存使用情况的Bash脚本

    用于监视Linux上的内存使用情况的Bash脚本 2019-06-17 11:32:45作者:戴进稿源:云网牛站 在本文中,我们添加了两个shell脚本来监视Linux操作系统上的内存利用率,即用于监 ...

  9. shell初学之nginx(负载均衡)

    创建三个以域名区分的网站a.com,b.com,c.com:访问a.b时,分别显示a.b两个网站的内容:访问c时,会出现依次显示两次a网站的内容,一次b网站的内容. 1 #!/bin/bash 2 s ...

  10. STM32低功耗总结

    之前自己做过一个项目的低功耗大约11ua,那时总结下有几点: 1.外设时钟必须切换为内部时钟: 2.不用的外设全部关闭,要用再开就是了: 3.浮空引脚必须配置为下拉: 4.硬件上的上拉.下拉电阻切记不 ...