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对象:再类中进行实例化

最新文章

  1. 存储程序(1)——MYSQL
  2. word20161206
  3. poll()函数的使用
  4. k近邻算法的Java实现
  5. 开源PLM软件Aras详解三 服务端简易开发
  6. linux:什么是linux
  7. Leetcode: Longest Absolute File Path
  8. 深入理解jQuery插件开发(转)
  9. 从gcc的__attribute__((packed))聊到结构体大小的问题
  10. block没那么难(一):block的实现
  11. fedora 下安装 文泉驿正黑体
  12. 密钥登录linux
  13. WCF服务发布到IIS中去 在WCF调试
  14. [bzoj4822][Cqoi2017]老C的任务&amp;[bzoj1935][Shoi2007]Tree 园丁的烦恼
  15. 磊哥测评之数据库SaaS篇:腾讯云控制台、DMC和小程序
  16. F. Asya And Kittens 并查集维护链表
  17. Django2.1.3 smtp 邮件 553报警
  18. 在ASP.NET Web Forms中用System.Web.Optimization取代SquishIt
  19. SpringBoot使用Mybatis注解开发教程-分页-动态sql
  20. C#读取Excel,Access数据库

热门文章

  1. 第 1 篇 Scrum 冲刺博客(5.21)
  2. PHP学习中的一些总结(持续更新)
  3. 那些jdk中坑你没商量的方法
  4. 记录laravelchina中的微信小程序教程的npm install安装报错
  5. 【JDK】Linux安装源码包JDK完整步骤
  6. Linux服务器被入侵后的处理过程
  7. vue computed实现原理
  8. Jmeter-添加用户变量
  9. ZT:通过Find命令找到你要找的东西
  10. 干货:不同场景容器内获取客户端源IP的方法