文档章节

BeanFactory和ApplicationContext的区别

春哥大魔王的博客
 春哥大魔王的博客
发布于 07/02 20:21
字数 395
阅读 41
收藏 2

Spring Bean

先从SpringBean说起,Spring Beans是被Spring容器管理的Java对象,比如:

public class HelloWorld { 
   private String message;  
   public void setMessage(String message){ 
      this.message  = message; 
   }  
   public void getMessage(){ 
      System.out.println("My Message : " + message); 
   } 
}

我们一般通过Application.xml配置Spring Bean元数据。

<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
   <bean id = "helloWorld" class = "com.zoltanraffai.HelloWorld">
      <property name = "message" value = "Hello World!"/>
   </bean>
</beans>

Spring Bean被Spring容器管理之后,可以在程序中获取使用它了。

BeanFactory

BeanFactory是Spring容器的基础接口,提供了基础的容器访问能力。

BeanFactory提供懒加载方式,只有通过getBean方法调用获取Bean才会进行实例化。

常用的是加载XMLBeanFactory:

public class HelloWorldApp{ 
   public static void main(String[] args) { 
      XmlBeanFactory factory = new XmlBeanFactory (new ClassPathResource("beans.xml")); 
      HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");    
      obj.getMessage();    
   }
}

ApplicationContext

ApplicationContext继承自BeanFactory接口,ApplicationContext包含了BeanFactory中所有的功能。

具有自己独特的特性:

  • Bean instantiation/wiriting
  • Bean实例化/串联
  • 自动BeanPostProcessor注册
  • 自动BeanFactoryPostProcessor注册
  • 方便的MessageSource访问
  • ApplicationEvent发布

ApplicationContext采用的是预加载,每个Bean都在ApplicationContext启动后实例化。

public class HelloWorldApp{ 
   public static void main(String[] args) { 
      ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); 
      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");    
      obj.getMessage();    
   }
}

后记

ApplicationContext包含了BeanFactory所有特性,通常推荐使用前者,但是对于性能有要求的场景可以考虑使用更轻量级的BeanFactory。大多数企业应用中Application是你的首选。

© 著作权归作者所有

春哥大魔王的博客
粉丝 42
博文 309
码字总数 284772
作品 0
海淀
程序员
私信 提问
spring 中beanFactory和ApplicationContext的区别

BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。 ApplicationContext接口,它由B...

姚君
2014/04/02
3.6K
0
经典Java面试题-Spring BeanFactory

[面试原题] ApplicationContext和BeanFactory的区别 [正确答案] 1.如果使用ApplicationContext,则配置的bean如果是singleton不管你用还是不用,都被实例化。好处是可以预先加载,坏处是浪费...

博为峰教研组
2016/11/01
66
0
Spring 源码(一)Spring 容器的入口

Spring 容器的初始化 当我们完成一个ApplicationContext的实例化时就完成了Spring容器的初始化,而AnnotationConfigApplicationContext的构造方法也就是Spring容器的入口。 这个构造方法只有...

xiaolyuh
09/23
102
0
Spring中ApplicationContext和beanfactory区别

BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。 ApplicationContext接口,它由B...

adamduan
2015/09/16
136
0
深入研究Spring-IoC:两种设计和实现

一.Sprng IOC 解除了对象实例化造成的耦合现象;将对象的创建和对生命周期的管理交给了容器来管理,可以通过注入的方式将IOC容器中的对象供给开发者使用,极大方便了开发。 二.IOC容器系列的...

mengdonghui123456
2017/08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

webGL和three.js的关系

本文转载于:专业的前端网站➤webGL和three.js的关系 如今浏览器的功能越来越强大,而且这些功能可能通过JavaScript直接调用。你可以用HTML5标签轻松地添加音频和视频,而且可以在HTML5画布上...

前端老手
28分钟前
5
0
Spring如何实现AOP,请不要再说cglib了!

1. 从注解入手找到对应核心类 最近工作中我都是基于注解实现AOP功能,常用的开启AOP的注解是@EnableAspectJAutoProxy,我们就从它入手。 上面的动图的流程的步骤就是: @EnableAspectJAutoPr...

温安适
30分钟前
31
0
Mybatis之ParameterHandler

mybatis-3.4.6.release. ParementerHandler是个接口,如下List-1 List-1 public interface ParameterHandler { Object getParameterObject(); void setParameters(PreparedStateme......

克虏伯
44分钟前
6
0
Spark sql的批处理物理计划BatchScanExec

BatchScanExec是batch类的物理计划,对应的逻辑计划是DataSourceV2Relation,是Datasource。 它的入参是Scan类,Scan类有两个重要方法,一个获取分区列表信息;另一个方法获取读取器工厂。 ...

守望者之父
48分钟前
10
0
for循环与while循环

循环结构三要素 a. 初始值 b. 循环条件 c. 改变条件 for循环 声明格式 for(表达式1;表达式2;表达式3){ 循环体语句 } 表达式1:用来循环的变量初始值。(开始值) 表达式2:用来判断循环的条件。...

Lenat
54分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部