package org.springframework.beans.factory;

import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
//BeanFactory 解析 17/04/27
public interface BeanFactory { //这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象,  
    //如果需要得到工厂本身,需要转义
//转义符“&”用来获取FactoryBean本身
String FACTORY_BEAN_PREFIX = "&"; //根据bean的名字进行获取bean的实例,这是IOC最大的抽象方法
Object getBean(String name) throws BeansException; //根据bean的名字和Class类型进行获取Bean的实例,和上面方法不同的是,bean名字和Bean 的class类型不同时候会爆出异常
<T> T getBean(String name, Class<T> requiredType) throws BeansException; <T> T getBean(Class<T> requiredType) throws BeansException; Object getBean(String name, Object... args) throws BeansException; <T> T getBean(Class<T> requiredType, Object... args) throws BeansException; //检测这个IOC容器中是否含有这个Bean
boolean containsBean(String name); //判断这个Bean是不是单利
boolean isSingleton(String name) throws NoSuchBeanDefinitionException; //检测Bena是不是多例,
boolean isPrototype(String name) throws NoSuchBeanDefinitionException; //查询指定的bean的名字和Class类型是不是指定的Class类型
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException; boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException; //这里对得到bean实例的Class类型
Class<?> getType(String name) throws NoSuchBeanDefinitionException;  //这里得到bean的别名,如果根据别名检索,那么其原名也会被检索出来 
String[] getAliases(String name); }

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

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

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

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

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

创建IOC的过程:

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

以上几部解析:

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

2.创建工厂

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

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

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

												

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. [PWA] Show an Error when a POST or DELETE Fails in an Offline PWA

    We're storing JSON data in the cache - but that only applies to HTTP GET requests - and not to POST  ...

  2. Odoo 8,9,10 制造领料、入库 实践

    Odoo12 已经支持在 同一个仓库内,使用 投入/产品 库位, 不必采用本文的方法     Odoo 设计在 仓库/库存 进行生产,也就是 在 仓库/库存 领料,产出, 例如     如果要实现一般 ...

  3. C语言 | 计算器实现(中缀表示法/后缀表示法)

    ———————————————————————————————————————————— 实现原理: 每个操作数都被依次压入栈中,当一个运算符到达时,从栈中弹出相应数目的操作数(对于二元运算符来说是两 ...

  4. CentOS6.8 安装FTP及添加用户

    一 安装FTP 1 检测是否已经安装FTP rpm -qa | grep vsftpd 2 若没有,则进行安装 yum install vsftpd 二 设置vsftpd开机启动 chkconfig ...

  5. Android开发之Serializable 和 Parcelable的差别(源码分享)

    android 中自己定义的对象序列化的问题有两个选择一个是Parcelable,另外一个是Serializable. 一 序列化原因: 1.永久性保存对象.保存对象的字节序列到本地文件里. 2.通过 ...

  6. Jmeter3.0-多维度的图形化HTML报告

    本文转载于推酷:http://www.tuicool.com/articles/BNvuEzr 在JMeter3.0之前,官方只提供在工具的UI上对测试结果部分维度的图形化展示,这对我带来了两方面的困 ...

  7. windows利用jconsole远程监控linux的tomcat

    1.配置tomcat ①  编辑tomcat的catelina.sh文件,进入tomcat安装目录,使用命令:sudo vim bin/catalina.sh,如果是普通用户启动的,则修改damen. ...

  8. thinkphp5或3.2 php动态修改config配置文件永久保存

    thinkphp默认的参数方法只能读取,或者动态修改不能永久修改. 这是自己摸索出来的特发出来给需要的朋友(懂的朋友别笑话,功能我自己使用是没任何问题).有些参数还是保存在配置文件方便快捷!不一定所有 ...

  9. Iwfu-GitHubclient使用

    Git/GitHub介绍 GitHub是著名的项目托管平台,有关Git和GitHub的介绍參考以下链接: Git介绍 url=OlagjwbaAdSJ2pjckgJCLBYd-LFFTDBriRnLt ...

  10. Android小应用之拨号器

    首先看一下Android Studio下怎么设置应用的ICON Activity的onCreate()方法 当界面刚被创建时会回调此方法,super.onCreate()执行父类的初始化操作,必须要加 ...