Spring-3 ApplicationContext

来源:互联网 发布:淘宝网店提升信誉 编辑:程序博客网 时间:2024/05/17 01:50

Spring容器的最基本接口就是BeanFactory,它有一个子接口:ApplicationContext,称Spring上下文。

BeanFactory包含以下5个方法: 

- boolean       containsBean(String name):         Spring容器中是否包含id为name的bean 

- < T>T          getBean(Class<> requied Type):  该类型时,对象唯一可以获取 

- Object         getBean(String name)

 - <T> T         getBean(String name, Class requiedType)

 - Class<?>   getType(String name)

ApplicationContext包含BeanFactory的全部功能,还有额外的功能,通常不会使用BeanFactory,建议使用ApplicationContext

ApplicationContext的额外功能:

一、默认初始化suoyou所有singleton Bean,也可以通过配置取消。

        当系统创建ApplicationContext时,默认会预初始化所有的singleton Bean。包括调用构造器创建实例,及根据<property>执行setter方法,意味着系统前期开销大。

bean:

package codeEETest;public class Person{public Person(){System.out.println("==正在执行Person无参数的构造器==");}public void setTest(String name){System.out.println("正在调用setName()方法,传入参数为:" + name);}}
xml:

<bean id="chinese" class="codeEETest.Person"><!-- 驱动Spring执行chinese Bean的setTest()方法,以"孙悟空"为传入参数 --><property name="test" value="孙悟空"/></bean>
即使主程序只有一行代码,即创建容器:
ApplicationContext ctx = new ClassPathXmlApplicationContext("codeEETest/beans.xml");

Spring容器仍然会初始化Bean,结果:

==正在执行Person无参数的构造器==正在调用setName()方法,传入参数为:孙悟空


为了防止初始化,配置lazy-init="true"

<bean id="chinese" class="codeEETest.Person" lazy-init="true"><!-- 驱动Spring执行chinese Bean的setTest()方法,以"孙悟空"为传入参数 --><property name="test" value="孙悟空"/></bean>

二、ApplicationContext事件机制