2.二级接口ListableBeanFactory

这个随笔主要讲的是ListableBeanFactory

package org.springframework.beans.factory;

import java.lang.annotation.Annotation;
import java.util.Map;

import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;

//可将Bean逐一列出的工厂
public interface ListableBeanFactory extends BeanFactory {

     //是否存在给定的bean名称的信息
    boolean containsBeanDefinition(String beanName);

     //BeanDefinition的总数
    int getBeanDefinitionCount();

     //返回工程中所有bean的名字
    String[] getBeanDefinitionNames();

     //返回对于指定类型的beanName
    String[] getBeanNamesForType(ResolvableType type);

     //返回指定类型bean的名字
    String[] getBeanNamesForType(Class<?> type);

         /*
     * 返回指定类型的名字
     * includeNonSingletons为false表示只取单例Bean,true则不是
     * allowEagerInit为true表示立刻加载,false表示延迟加载。
     * 注意:FactoryBeans都是立刻加载的。
     */
    String[] getBeanNamesForType(Class<?> type, boolean includeNonSingletons, boolean allowEagerInit);

     //根据bean的类型返回bean和bean的Map集合
    <T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException;

    <T> Map<String, T> getBeansOfType(Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)
            throws BeansException;

     // 根据注解类型,查找所有有这个注解的Bean名和Bean的Map
    String[] getBeanNamesForAnnotation(Class<? extends Annotation> annotationType);

     // 根据注解类型,查找所有有这个注解的Bean名和Bean的Map
    Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType) throws BeansException;

     //根据指定Bean名和注解类型查找指定的Bean
    <A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType)
            throws NoSuchBeanDefinitionException;

}

这个工厂中扩展了

3个 BeanDefinition有关的接口,

3个根据指定类型返回beanName的数组

2个根据指定类型返回bean和存储Bean的Map集合

3个和注解有关的返回bean和beanMap的接口方法

对于BeanDefinition中包含了一个类在Spring工厂中所有属性。

这个工厂如同名字一样,可以返回所有bean的实例,但是这个工厂并没有直接返回实例的方法,只有通过条件返回指定bean的Name数组,Map等,

其实不需要直接返回实例的方法,因为我们拿到了bean的所有名字,我们就可以使用getbean,父接口中得方法,也就是BeanFactory进行获取Bean的实例!

时间: 2024-10-26 01:51:44

2.二级接口ListableBeanFactory的相关文章

3.二级接口HierarchicalBeanFactory

HierarchicalBeanFactory   字面意思是分层工厂, 那么这个工厂是怎么分层的呢? package org.springframework.beans.factory; //分层工厂 public interface HierarchicalBeanFactory extends BeanFactory { //返回工厂的父工厂 BeanFactory getParentBeanFactory(); //这个工厂中是否包含这个Bean boolean containsLoca

Java二级-接口

接口:一组常量与抽象方法的集合 声明方式: public interface shape { public static final PI=3.14; public abstract double area(); public abstract double volume(); } 接口必须使用interface关键字声明 接口中只能声明常量和抽象方法 常量声明中[public static final]为默认声明方式,可省略 方法声明中[public abstic]同为默认声明方式,可省略 接

Spring源码分析——BeanFactory体系之接口详细分析

Spring的BeanFactory的继承体系堪称经典.这是众所周知的!作为Java程序员,不能错过! 前面的博文分析了Spring的Resource资源类Resouce.今天开始分析Spring的IOC部分.众所周知,IOC是Spring框架最迷人的地方.它最重要的接口,就是BeanFactory了.BeanFactory有着庞大的继承.实现体系,有众多的子接口.实现类.本博文的目标就是抽丝剥茧,从源代码入手,分析Spring的实现和架构,从中进步. 在阅读的过程中,可以参照Spring文档来

Spring源码学习之BeanFactory体系结构

一.BeanFactory BeanFactory是Spring IOC容器的鼻祖,是IOC容器的基础接口,所有的容器都是从它这里继承实现而来.可见其地位.BeanFactory提供了最基本的IOC容器的功能,即所有的容器至少需要实现的标准. BeanFactory体系结构是典型的工厂方法模式,即什么样的工厂生产什么样的产品.BeanFactory是最基本的抽象工厂,而其他的IOC容器只不过是具体的工厂,对应着各自的Bean定义方法.但同时,其他容器也针对具体场景不同,进行了扩充,提供具体的服务

spring 源码解读与设计详解:2 BeanFactory

在spring的官网中我们看到,spring的产品已经发展的非常壮大,然而很多产品对于很多公司来讲用的非常少,甚至用不到.因此本系列的源码解读也不会涉及全部的spring的产品.而是只对spring的核心功能IoC和AOP进行解释. 所谓源码解读,解读的是什么?实际上源码解读读的更多的是源码的注释,因为一个类的作用.一个接口或者一个方法的作用,我们往往是要根据注释才知道,这也是为什么在代码规范中,注释是一个非常重要的模块的原因. 参考: Spring源码分析--BeanFactory体系之接口详

Spring 之 BeanFactory 源码 - 接口分析

一.BeanFactory的基本类体系结构(接口为主): 这是我画的BeanFactory基本的类体系结构,这里没有包括强大的ApplicationContext体系,ApplicationContext我准备放到下一篇再分析. 具体: 1.BeanFactory作为一个主接口不继承任何接口,暂且称为一级接口. 2.有3个子接口继承了它,进行功能上的增强.这3个子接口称为二级接口. 3.ConfigurableBeanFactory可以被称为三级接口,对二级接口HierarchicalBeanF

spring源码阅读之Bean的加载(二)

在正式分析源码之前,先来了解一下SpringBeans里面最核心的两个类  DefaultListableBeanFactory XMLBean继承自 DefaultListableBeanFactory,而 DefaultListableBeanFactory是整个Bean加载的核心部分,是Sprin注册及加载Bean的默认实现,而对于XmlBeanFactory与 DefaultListableBeanFactory不同的地方其实就是在XmlBeanFactory中使用了自定义的XML读取器

Spring学习笔记之The IoC container

IoC is also known as dependency injection (DI). 这是一个过程?什么样的过程呢?对象自己定义它的依赖关系,这意味着,那些他们依赖的对象,只能通过构造函数参数,工厂方法参数或用set方法在它被创建出来后给予.Srping容器在创建这些对象的时候就注入这些依赖项.控制反转到底是什么东西呢?说白了其实就是以前我想吃饭,我需要自己找饭馆,自己找座位,自己下单子,最后才能吃上饭,现在呢?有了spring的容器,你就不需要去找了,要什么给什么,它都替你搞定,不需

Spring源码由浅入深系列二 类结构

BeanFactory 上一章中,我们提过Spring的依赖注入容器是BeanFactory.BeanFactory是一个基础接口,它有一个默认实现类:DefaultListableBeanFactory.我们可以由它为出发点看看Spring的类层次结构.如下图所示:        上图中,有一个值得我们学习的设计方法.DefaultListableBeanFactory类实现了ConfigurableListableBeanFactory接口.然后ConfigurableListableBea