欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring-3 ApplicationContext

程序员文章站 2022-05-21 19:26:38
...

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事件机制



相关标签: spring java