1. package org.springframework.beans.factory;
  2.  
  3. import org.springframework.beans.BeansException;
  4. import org.springframework.core.ResolvableType;
  5. //BeanFactory 解析 17/04/27
  6. public interface BeanFactory {
  7.  
  8. //这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,  
  9.     //如果需要得到工厂本身,需要转义
  10. //转义符“&”用来获取FactoryBean本身
  11. String FACTORY_BEAN_PREFIX = "&";
  12.  
  13. //根据bean的名字进行获取bean的实例,这是IOC最大的抽象方法
  14. Object getBean(String name) throws BeansException;
  15.  
  16. //根据bean的名字和Class类型进行获取Bean的实例,和上面方法不同的是,bean名字和Bean 的class类型不同时候会爆出异常
  17. <T> T getBean(String name, Class<T> requiredType) throws BeansException;
  18.  
  19. <T> T getBean(Class<T> requiredType) throws BeansException;
  20.  
  21. Object getBean(String name, Object... args) throws BeansException;
  22.  
  23. <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
  24.  
  25. //检测这个IOC容器中是否含有这个Bean
  26. boolean containsBean(String name);
  27.  
  28. //判断这个Bean是不是单利
  29. boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
  30.  
  31. //检测Bena是不是多例,
  32. boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
  33.  
  34. //查询指定的bean的名字和Class类型是不是指定的Class类型
  35. boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
  36.  
  37. boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
  38.  
  39. //这里对得到bean实例的Class类型
  40. Class<?> getType(String name) throws NoSuchBeanDefinitionException;
  41.  
  42.  //这里得到bean的别名,如果根据别名检索,那么其原名也会被检索出来 
  43. String[] getAliases(String name);
  44.  
  45. }

Spring IOC容器最基本的接口BeanFactory,定义了IOC容器最基本的规范,不管如何,作为IOC的容器,这个接口必须满足容器的基本要求.

BeanFactory里只对IOC容器的基本行为作了定义,对于这个工厂怎么做的,我们根本不需要关i心,我们需要的是关心我们要的bean,

我们也可以自己来继承Bean,但是没有必要,Spring中提供了相对应得很多实现了beanfactory的模板给我们调用,

AbstractBeanFactory,DefaultListableBeanFactory,通过resource接口来定义bean数据,然后

对Xml定义文件的解析通过委托给XmlBeanDefinitionReader来完成,

创建IOC的过程:

  1. ClassPathResource beanxml =new ClassPathResource("bean.xml");
  2. DefaultListableBeanFactory factory =new DefaultListableBeanFactory();
  3. XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(factory);
  4. reader.loadBeanDefinitions(beanxml);

以上几部解析:

1.创建Ioc的容器抽象资源

2.创建工厂

3.创建一个读取抽象资源的的  BeanDefinitionReader ,来读取配置文件

4.读取到信息配置到factory中

很明显,这是一个典型的工厂模式的工厂接口。

  1.  

1.BeanFactory解析的更多相关文章

  1. 【Spring】BeanFactory解析bean详解

    在该文中来讲讲Spring框架中BeanFactory解析bean的过程,该文之前在小编原文中有发表过,要看原文的可以直接点击原文查看,先来看一个在Spring中一个基本的bean定义与使用. pac ...

  2. 深入理解Spring系列之三:BeanFactory解析

    转载 https://mp.weixin.qq.com/s?__biz=MzI0NjUxNTY5Nw==&mid=2247483824&idx=1&sn=9b7c2603093 ...

  3. Spring源码学习笔记之基于ClassPathXmlApplicationContext进行bean标签解析

    bean 标签在spring的配置文件中, 是非常重要的一个标签, 即便现在boot项目比较流行, 但是还是有必要理解bean标签的解析流程,有助于我们进行 基于注解配置, 也知道各个标签的作用,以及 ...

  4. Spring Cloud Finchley.SR1 版本的坑:placeholer占位符无法解析!

    接入nacos 之后,想把所有的配置丢上去. 启动程序是: @EnableDiscoveryClient @RestController @ComponentScan(basePackages = { ...

  5. 实现自己的BeanFactory、AOP以及声明式事务

    实现自己的BeanFactory                                                                   在使用spring时,我们很少用& ...

  6. 这一次搞懂Spring的XML解析原理

    前言 Spring已经是我们Java Web开发必不可少的一个框架,其大大简化了我们的开发,提高了开发者的效率.同时,其源码对于开发者来说也是宝藏,从中我们可以学习到非常优秀的设计思想以及优雅的命名规 ...

  7. 从零开始学spring源码之xml解析(一):入门

    谈到spring,首先想到的肯定是ioc,DI依赖注入,aop,但是其实很多人只是知道这些是spring核心概念,甚至不知道这些代表了什么意思,,作为一个java程序员,怎么能说自己对号称改变了jav ...

  8. spring(四)之基于注解(Annotation-based)的配置.md

    注解 这里讲的注解有下面几个 @Autowired @Qualifier(" ") @Genre(" ") @Offline @Resource(name=&q ...

  9. Spring源码学习(6)——容器的功能扩展

    之前的随笔中借BeanFactory介绍了bean的解析和加载的完整过程,实际上,除了BeanFactory,spring还提供了一种功能更加强大的容器:ApplicationContext Appl ...

随机推荐

  1. Git的微操作

    合并分支代码,简单操作: 1.切换到master主干代码 2.到git repositories 视图,点击需要合并的分支,例如v1.1.9 点击merge 进行合并 3.然后push to Upst ...

  2. windows 2003子目录权限丢失及子目录权限无法继承更改的解决方法

    对于ntfs格式的分区,不当的操作方式很容易引起各种访问权限问题. 早上,给公司服务器配置网站权限,其中一个网站添加IIS_User权限删除了everyone权限后,发现网站无法访问,要求输入用户名和 ...

  3. 文本文件打印类库(C#)

    我写了一个打印文本文件的类库,功能包含:打印预览.打印.打印时能够选择打印机.能够指定页码范围. 调用方法很easy: TextFilePrinter p = new TextFilePrinter( ...

  4. EffectiveJava(18)接口优先于抽象类

    ***接口和抽象类同样可以用来定义多个实现的类型,然而,接口通常是最佳途径.*** 这条规则有个例外 – 当演变的容易性比灵活性和功能性更为重要的时候,应该用抽象来定义类型 ,但前提是必须理解并且可以 ...

  5. Node.js 网页瘸腿爬虫初体验

    延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...

  6. 在vs2010中编译log4cxx-0.10.0具体方法(从下载、编译、解决错误具体介绍)

    一. 简单介绍 log4cxx是Java社区著名的log4j的c++移植版.用于为C++程序提供日志功能,以便开发人员对目标程序进行调试和审计,log4cxx是apache软件基金会的开源项目,基于A ...

  7. Android Socket通信编程

    安卓客户端通过socket与服务器端通讯一般可以按照以下几个步骤:(1).通过IP地址和端口实例化Socket,请求连接服务器:socket = new Socket(HOST, PORT); //h ...

  8. go语言25个关键字总结

    var和const :变量和常量的声明var varName type 或者 varName : = valuepackage and import: 导入func: 用于定义函数和方法return ...

  9. JavaScript 获取文件名,后缀名

    function getBaseName(str) { var segs = str.split('.'); if(segs.length > 1) segs.pop(); return seg ...

  10. Android版CSDN发现的一些问题

          作为CSDN的忠有用户,在他一推出这款APP以后.就下载了使用,近期发现了一些个问题,在此提出来.希望看到或者遇到同样问题的,提出你们的解决方式.       在CSDN手机版的首页上,我 ...