1、Beanfactory和ApplicationContext有什么区别

ApplicationContext

(1)在配置文件加载后创建bean

利用debug方式,在Student类的无参构造方法中书写输出语句,可以看看到在配置文件加载后即完成了bean的创建

(2)继承BeanFactory接口

(3)总结

  ApplicationContext: 应用上下文,继承BeanFactory接口,它是更高级的容器,它在启动的时候就把所有的Bean全部实例化了,可以及时检查依赖是否完全注入。并且在BeanFactory 基础上还提供了其他的功能,如国际化、统一资源文件读取等。

Beanfactory

(1)最底层的一个接口

(2)懒加载模式,只有在getBean的时候才会创建对象

getBean的时候创建了对象:

(3)总结

  BeanFactory: 可以理解为含有 bean 集合的工厂类。是Spring里面最底层的接口,包含了各种bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。它提供了实例化对象和拿对象的功能。 但它是延迟加载,如果bean没有完全注入,BeanFactory会在你第一次调用GetBean方法才会抛出异常。

2、BeanFactory 和 FactoryBean 有什么区别

  BeanFactory是个Factory,也就是IOC容器或对象工厂

  FactoryBean是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。它是一种可以定制实例化Bean的方式,通过实现FactoryBean,完成自定义的Bean实例化细节。例如可以通过FactoryBean代理对象,对其所有方法进行拦截,形成AOP类似功能。

创建Student类:

public class Student  {
private String sname;
public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
}
public Student() {
System.out.println("bean创建了");
}
}

创建一个类实现BeanFactory接口:

//该类返回的不是本类的bean对象,而是返回getObject方法的返回值
public class MyFactoryBean implements FactoryBean {
@Override
public Object getObject() throws Exception {
System.out.println("FactoryBean的"+"getObject");
return new Student();
} @Override
public Class<?> getObjectType() {
return Student.class;
}
}

测试方法:

    public void test1(){
ApplicationContext applicationContext=new
ClassPathXmlApplicationContext("applicationContext.xml");//创建容器对象
Student student= (Student) applicationContext.getBean("myfactorybean");
System.out.println(student);
MyFactoryBean myFactoryBean= (MyFactoryBean) applicationContext.getBean("&myfactorybean");
System.out.println(myFactoryBean);
}

测试结果:

   FactoryBean是一个接口,当在IOC容器中的Bean实现了FactoryBean后,通过getBean(String BeanName)获取到的Bean对象并不是FactoryBean的实现类对象,而是这个实现类中的getObject()方法返回的对象。要想获取FactoryBean的实现类,就要getBean(&BeanName),在BeanName之前加上&。

源码:

FactoryBean有三个方法:
getObject返回需要注册到Spring容器中去的bean实体,
getObjectType返回你注册的这个Object的具体类型
isSingleton方法返回这个bean是不是单例的,如果是,那么Spring容器全局将只保持一个该实例对象,否则每次getBean都将获取到一个新的该实例对象。

总结:

1、spring中的bean与对象的区别

bean:经过了完整的生命周期,存在于spring的容器中

java对象:再类中进行实例化

spring:Beanfactory和ApplicationContext、BeanFactory 和 FactoryBean的更多相关文章

  1. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring IoC容器BeanFactory和ApplicationContext

    IoC 是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建.Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring ...

  2. Spring系列之beanFactory与ApplicationContext

    一.BeanFactoryBeanFactory 是 Spring 的“心脏”.它就是 Spring IoC 容器的真面目.Spring 使用 BeanFactory 来实例化.配置和管理 Bean. ...

  3. Spring中的接口BeanFactory和FactoryBean的学习

    BeanFactory: 相当于对象工厂,可以获取对象的实例以及相应的属性.BeanFactory定义了IOC容器的最基本形式,并提供了IOC容器应遵守的的最基本的接口,也就是Spring IOC所遵 ...

  4. 转:Spring系列之beanFactory与ApplicationContext

    原文地址:Spring系列之beanFactory与ApplicationContext 一.BeanFactoryBeanFactory 是 Spring 的“心脏”.它就是 Spring IoC ...

  5. 【Spring】2、BeanFactory 和FactoryBean的区别

    转自:http://chenzehe.iteye.com/blog/1481476 1. BeanFactory BeanFactory定义了 IOC 容器的最基本形式,并提供了 IOC 容器应遵守的 ...

  6. 【Spring IoC】BeanFactory 和 ApplicationContext(五)

    一.BeanFactory容器 BeanFactory 容器是一个最简单的容器,它主要的功能是为依赖注入 (DI) 提供支持,这个容器接口在 org.springframework.beans.fac ...

  7. BeanFactory和ApplicationContext的区别+部分Spring的使用

    BeanFactory和ApplicationContext的区别 ApplicationContext 方式加载:创建容器的同时 容器初始化,容器所有的bean创建完毕   Spring容器中获取一 ...

  8. Spring(二)核心容器 - 简介 、BeanFactory、ApplicationContext

    目录 前言 1.容器简介 2.容器的结构 2.1 BeanFactory 2.2 ApplicationContext 2.2.1 ConfigurableApplicationContext 2.2 ...

  9. spring中的BeanFactory与ApplicationContext的作用和区别?

    BeanFactory类关系继承图 1. BeanFactory类结构体系: BeanFactory接口及其子类定义了Spring IoC容器体系结构,由于BeanFactory体系非常的庞大和复杂, ...

随机推荐

  1. 从零搭建Spring Boot脚手架(7):整合OSS作为文件服务器

    1. 前言 文件服务器是一个应用必要的组件之一.最早我搞过FTP,然后又用过FastDFS,接私活的时候我用MongoDB也凑合凑合.现如今时代不同了,开始流行起了OSS. Gitee: https: ...

  2. Mysql 如何实现全文检索,关键词跑分

    一.前言 今天一个同事问我,如何使用 Mysql 实现类似于 ElasticSearch 的全文检索功能,并且对检索关键词跑分?我当时脑子里立马产生了疑问?为啥不直接用es呢?简单好用还贼快.但是听他 ...

  3. 创建human用户登录数据库创建表

    根据人力资源管理系统中表的设计,创建human用户登录数据库创建 准备阶段 把运行脚本复制到D:\app\Administrator\product\11.2.0\dbhome_1\demo\sche ...

  4. oa项目面试准备

    熟悉项目在ssm框架下的编程流程,了解mysql html spring springmvc mybatis技术.了解过springboot编程. 在上个寒假跟着培训机构用springboot框架编写 ...

  5. Lua_C_C#

    lua调用c函数 https://www.cnblogs.com/etangyushan/p/4384368.html Lua中调用C函数 https://www.cnblogs.com/sifenk ...

  6. 文件操作 -- 生成java文件

    import hashlibimport os def genJavaFile(packageName, soFile):    className, suffix = soFile.split('. ...

  7. 【转】Tomcat搭建文件服务器

    http://blog.csdn.net/yin_jw/article/details/43524659 1. 配置在tomcat目录下 直接把文件放在 tomcat6/webapps/ROOT 目录 ...

  8. Android Studio相关目录

    Android Studio的Android SDK的安装路径 /Users/XXX/Library/Android/sdk/ nox_adb.exe connect 127.0.0.1:62001 ...

  9. Lua继承userdata

    http://blog.csdn.net/mywcyfl/article/details/37765751 http://blog.csdn.net/teng_ontheway/article/det ...

  10. Inscribed Figures(思维)

    The math faculty of Berland State University has suffered the sudden drop in the math skills of enro ...