关于Spring中Bean的实例化

 

 

BeanFactory采用了延迟加载的方案,也就是说:

对于<bean id=”” class=””>这类自定义bean,只有在程序中,

当我们第一次的调用了getBean()方法,或者说在被依赖注入的时候,才会对该Bean进行实例化

 

关于ApplicationContext 它是拓展的BeanFactory接口

ApplicationContext默认情况下,在初始化自身的时候就会对所有的bean做实例化,

除非对bean设置lazy-init=”true”,这样有利于检查所依赖属性是否能注入。

  另外,ApplicationContext提供了更多的扩展功能,如对要加载的资源文件的国际化’处理,

BeanPostProcessor的处理,所以在javaEE应用中,通常情况下我们都选择使用ApplicationContext。

不管是使用BeanFactory还是ApplicationContext,Spring 默认以singleton的方式初始化bean.

 

在通常情况下,我们一般使用的是ApplicationContext的两个实现类:

1.FileSystemXmlApplicationContext [根据文件路径获取]

推荐使用这种方式获得上下文对象,以或得到我们需要bean

2.ClassPathXmlApplicationContext   [根据类路径获取]

 ClassPathXmlApplicationContext之 所以拥有 bean 工厂的功能是通过持有一个真正的 bean 工厂DefaultListableBeanFactory 的实例,并通过代理 工厂完成创建实例。

使用这个对象有一个缺点,会比较耗内存。

下面我们来模拟一下Spring的BeanFactory,通过XML解析+反射获取注入的Bean

自定义applicationContext.xml配置文件

关于Bean的实例化时机

 …..待更新

发表评论

电子邮件地址不会被公开。