Ioc容器——BeanFactory和ApplicationContext

Ioc容器——BeanFactory和ApplicationContext

1. Spring Ioc容器

说起Ioc容器,就不得不说控制反转和依赖注入了。这是Spring的核心原理,先说一下什么是Ioc容器,可以这么理解Ioc容器,就像一个高级的工厂类,帮助你创建、管理、销毁对象。如果你想要的对象中有引用类型,Ioc就会自动注入。

下面说一下什么是控制反转。以前我们写程序都是由程序猿创建对象,这也就是所谓的我们控制对象。控制反转顾名思义,就是由Ioc容器帮助我们控制对象,控制权交给了Ioc容器,我们只需要从Ioc容器获取想要的对象即可,不再考虑如何创建对象了。

依赖注入又是什么?你把对象的控制权交给了Ioc容器,Ioc容器根据对象依赖的属性进行一一注入,简单讲就是赋值,保证你所拿到的对象不会出现什么空指针的异常。

Spring火遍世界的绝大部分原因就是它颠覆了传统的开发思想,将控制反转和依赖注入带入到了开发者的面前。这种思想减少了程序间的耦合度,让开发者更多的去专注于业务,而非创建对象,管理对象······这些无用的方面。

2. BeanFactory和ApplicationContext关系

  • BeanFactory采用的是延迟加载,也就是等到getBean的时候才进行依赖注入,而ApplicationContext采用的一次性创建所有的Bean。

  • BeanFactory和ApplicationContext是Spring容器的两个核心接口,并且ApplicationContext继承了BeanFactory。

  • BeanFactory一般称之为Spring Ioc容器,而ApplicationContext则称之为应用上下文。Spring中的容器大概分为两种,一种是直接继承了BeanFactory,这是最简单的,只是基本上实现了DI;另一种是继承了派生后的ApplicationContext,他能提供更多的服务,可以解析文本等等。

3. BeanFactory

BeanFactory是Ioc容器的根接口,独立使用的BeanFactory的是DefaultListableBeanFactory类,Bean的容器实际上就是一个Map,实现的是ConcurrentMap。

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;

    String[] getAliases(String var1);
}

在这里插入图片描述

4. ApplicationContext

ApplicationContext是BeanFactory的完整体,它将变成配置化,ApplicationContext不仅继承了BeanFactory的基本功能,还继承了MessageSource(国际化资源接口)、ResourceLoader(资源加载接口)、ApplicationEventPublisher(应用事件发布接口)等,下面继承类图可以看出。

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, 				HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
    @Nullable
    String getId();
    
	String getApplicationName();

	String getDisplayName();

	long getStartupDate();

	@Nullable
	ApplicationContext getParent();

	AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值