ApplicationContext 与 BeanFactory 与 FactoryBean


一、ApplicationContext 和 BeanFactory 的区别

ApplicationContext 包含 BeanFactory(ApplicationContext:项目,BeanFactory:工具类),BeanFactory提供了一些对bean管理的基础功能,比如:获取Bean,注册Bean,获取beanDefinition对象,注册beanDefinition对象等。但包扫描,bean的命名等BeanFactory无法提供。

  1. BeanFactory与ApplicationContext是spring的两大核心接口,都可以当做spring的容器.
  2. ApplicationContext 面向使用Spring 框架的开发者, ApplicationContext 使用的“场合”较多
  3. BeanFactory是Spring中最底层的接口,是IOC的核心,其功能包含了各种Bean的定义、加载、实例化、依赖注入和生命周期的管理。是IOC最基本的功能。如Bean的注册(
    beanFactory.registerSingleton(“bean5”,new Bean5()); )
  4. ApplicationContext是BeanFactory的子接口,对BeanFactory进行了扩展,具有BeanFactory所有的功能。支持国际化、资源文件访问、载入多个上下文配置文件,如:扫描、Bean名字的自定义
  • BeanFactory采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean),才对该Bean进行加载实例化。这样,我们就不能发现一些存在的Spring配置问题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。
  • ApplicationContext,它时在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入。ApplicationContext启动后预载入所有的单例Bean,通过预载入单例Bean,确保当你需要的时候,你就不用等待,因为它们已经创建好了。

二、BeanFactory 和 FactoryBean 的区别

  1. BeanFactory是一个容器对象,提供了我们对Bean的基本管理,如:getBean()、beanFactory.registerSingleton(“bean5”,new Bean5());
  2. FactoryBean本身是一个Bean,具有 getObject() 和 getObjectType() 方法,会返回一个非自身的Bean

三、FactoryBean的特点

  1. 本身MyFactoryBean是一个bean 可以通过getBean获取
  2. 可以返回一个bean(非本身bean)
  3. 可以被spring识别
  4. 如果通过getBean(beanName)获取,返回的是getObject返回的对象
  5. getBean(&beanName)获取的是本身bean(即MyFactoryBean)

MyFactoryBean(实现FactoryBean接口)

@Component
public class MyFactoryBean implements FactoryBean {
    @Override
    public Object getObject() throws Exception {
        return new E();
    }

    @Override
    public Class<?> getObjectType() {
        return E.class;
    }
}

测试

    @Test
    public void TestBean5() {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        log.debug("无&:{}",context.getBean("myFactoryBean"));
        log.debug("有&:{}",context.getBean("&myFactoryBean"));
    }

在这里插入图片描述


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值