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

【J2EE学习笔记】Spring的核心接口

程序员文章站 2022-05-15 11:06:04
...

Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。它们代表了Spring容器。

BeanFactory

BeanFactory接口负责创建和分发各种类型的Bean。

在Spring中有几种BeanFactory的实现,其中最常用的是org.springframework.bean.factory.xml.XmlBeanFactory。它根据XML文件中的定义装载Bean。

要创建XmlBeanFactory,需要传递一个InputStream对象给构造函数,用来提供XML文件给工厂。

例如:

BeanFactory factory=new XmlBeanFactory(new FileInputStream("applicationContext.xml"));

这行代码告诉BeanFactory从XML文件中读取Bean的定义信息,但是没有实例化Bean。

当getBean()方法被调用的时候,把需要的Bean的名字当作参数传递进去,工厂就会实例化Bean,并使用依赖注入开始设置Bean的属性。

例如:

MyBean myBean=(MyBean)factory.getBean("myBean");

ApplicationContext

ApplicationContext(应用上下文)继承自BeanFactory,表面上看两者功能差不多,都是载入Bean定义信息,装配Bean,根据需要分发Bean,但是ApplicationContext提供了更多功能:

1、应用上下文提供了文本信息解析工具,包括对国际化的支持

2、应用上下文提供了载入文本资源的通用方法,如载入图片

3、应用上下文可以向注册为监听器的Bean发送事件

在ApplicationContext的诸多实现中,有如下三个常用的实现。

ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息,把上下文定义文件当成类路径资源。

FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息

XmlWebApplicationContext:从Web系统中的XML文件载入上下文定义信息

例如:

ApplicationContext applicationContext=new FileSystemXmlApplicationContext("src/applicationContext.xml");
ApplicationContext applicationContext2=new ClassPathXmlApplicationContext("applicationContext.xml");
ApplicationContext applicationContext3=WebApplicationContextUtils.getWebApplicationContext(Request.getSession().getServletContext());

FileSystemXmlApplicationContext和ClassPathXmlApplicationContext的区别是:FileSystemXmlApplicationContext只能在指定的路径中寻找,而ClassPathXmlApplicationContext可以在整个类路径中寻找。

除了ApplicationContext提供的附加功能外,ApplicationContext和BeanFactory另一个重要区别是单实例Bean如何被加载。

ApplicationContext会在上下文启动后预载入所有的单实例Bean,确保当需要的时候它们已经准备好,应用程序不需要等待它们被创建。

相关标签: J2EE