关于Spirng中的BeanFactory

**

关于Spirng中的BeanFactory

**
定义:Spring是IOC、AOP的容器

IOC

定义:IOC是Bean的容器,通常使用XML、注解等方式,将对象注入到IOC中

BeanFactory
  • BeanFactory,它是一个工厂类(接口),使用简单工厂模式,
    它是负责生产和管理bean的一个的工厂。在Spring中,BeanFactory是IOC容器的顶层核心接口,负责生产Bean;
  • 在BeanFactory生产bean时,中间还需要通过BeanDefinition,BeanDefinition中保存了生产Bean所需要的一切信息,多个BeanDefinition统一存在BeanDefinitionMap中;BeanDefinition的信息通过BeanDefinitionRegistry接口注册进去,读取xml、注解的配置信息则是由BeanDefinitionReader读取;
  • BeanFactory只是个接口,并不是IOC容器的具体实现,但是Spring容器给出了很多种实现,如
    DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,其中XmlBeanFactory就是常用的一个,该实现将以XML方式描述组成应用的对象及对象间的依赖关系。XmlBeanFactory类将持有此XML配置元数据,并用它来构建一个完全可配置的系统或应用。
  • DefaultListableBeanFactory,XmlBeanFactory,ApplicationContext
    等具体的容器都是实现了BeanFactory,再在其基础之上附加了其他的功能。 BeanFactory和ApplicationContext就是spring框架的两个IOC容器,现在一般使用ApplicationnContext,其不但包含了BeanFactory的作用,同时还进行更多的扩展。

在不使用spring框架之前,我们的service层中要使用dao层的对象,不得不在service层中new一个对象。存在的问题:层与层之间的依赖。

service层要用dao层对象需要配置到xml配置文件中,至于对象是怎么创建的,关系是怎么组合的都交给了spring框架去实现。
例如:

ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml", "applicationContext-part2.xml"});
BeanFactory factory = (BeanFactory) context;

接着使用getBean(String beanName)方法就可以取得bean的实例;

BeanFactory常用方法:
  • containsBean(String beanName) 判断工厂中是否包含给定名称的bean定义,若有则返回true
  • getBean(String)
    返回给定名称注册的bean实例。根据bean的配置情况,如果是singleton模式将返回一个共享实例,否则将返回一个新建的实例,如果没有找到指定bean,该方法可能会抛出异常
  • getBean(String, Class) 返回以给定名称注册的bean实例,并转换为给定class类型
  • getType(String name)
    返回给定名称的bean的Class,如果没有找到指定的bean实例,则排除NoSuchBeanDefinitionException异常
  • isSingleton(String) 判断给定名称的bean定义是否为单例模式
  • getAliases(String name) 返回给定bean名称的所有别名
public interface BeanFactory {
    String FACTORY_BEAN_PREFIX = "&";

    Object getBean(String var1) throws BeansException;

    <T> T getBean(String var1, Class<T> var2) throws BeansException;

    Object getBean(String var1, Object... var2) throws BeansException;

    <T> T getBean(Class<T> var1) throws BeansException;

    <T> T getBean(Class<T> var1, Object... var2) throws BeansException;

    <T> ObjectProvider<T> getBeanProvider(Class<T> var1);

    <T> ObjectProvider<T> getBeanProvider(ResolvableType var1);

    boolean containsBean(String var1);

    boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;

    boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;

    boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;

    boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;

    @Nullable
    Class<?> getType(String var1) throws NoSuchBeanDefinitionException;

    @Nullable
    Class<?> getType(String var1, boolean var2) throws NoSuchBeanDefinitionException;

    String[] getAliases(String var1);
}
基本运行过程

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值