ApplicationContext

   ApplicationContext接口是BeanFactory的子接口,代表一个应用的上下文环境。在BeanFactory的基础上,

ApplicationContext扩展了更多使用的功能,如Bean的声明周期管理、框架事件体系、国际化支持等功能,并且这些

功能大部分可以通过少量配置以零编码的方式实现。因此,应用上下文ApplicationContext是访问Spring IoC容器最常

用的接口。


   这里先说明两种方式的区别:

   (1)ApplicationContext接口操作更加简繁

   (2)在加载完毕配置文件并初始化Spring IoC容器时,如果使用ApplicationContext接口的实现类,则会在同期初始化完毕后就会构造所有Bean对象;而如果使用其他BeanFactory接口实现类,则不会构造Bean对象,而是延迟到调用getBean()方法时构造。因此Application的初始化时间会稍长一些,但是调用getBean()是由于Bean已经构造完毕,速度会更快。


  下面,我就通过对比BeanFactory与ApplicationContext进行装载配置的区别,体现ApplicationContext接口的便捷。

(1)创建一个Web Project;

(2)在工程下面,把包文件都复制到WEB-INF/lib文件夹下;

(3)创建一个Package,例如我这里的名称为com.loster.li;

(4)在com.loster.li包下面创建一个Book类:

package com.loster.li;

public class Book {
	private String name;  //书名
	private String author;  //作者
	private String publishHouse;  //出版社
	private double price;  //价格
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPublishHouse() {
		return publishHouse;
	}
	public void setPublishHouse(String publishHouse) {
		this.publishHouse = publishHouse;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
}
(5)接下来,也是在这个包下面创建一个XML配置文件,bean.xml:

<?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-2.5.xsd">
           
	<bean id="book" class="com.loster.li.Book">
		<property name="name" value="SSH开发"></property>
		<property name="author" value="xiaoli"></property>
		<property name="publishHouse" value="某出版社"></property>
		<property name="price" value="45"></property>
	</bean>
</beans>
(6)创建一个BeanTest类装载配置文件:

package com.loster.li;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.io.ClassPathResource;

public class BeanTest {
	public static void main(String[] args){
		//根据配置文件创建ClassPathResource对象
		ClassPathResource resource = new ClassPathResource("com/loster/li/bean.xml");
		//创建BeanFactory对象
		DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
		XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
		reader.loadBeanDefinitions(resource);
		
		//从BeanFactory对象中,根据id获取具体对象
		Book book = (Book)factory.getBean("book");
		
		System.out.println(book.getName());
		System.out.println(book.getAuthor());
		System.out.println(book.getPublishHouse());
		System.out.println(book.getPrice());
	}
}

   这里首先用ClassPathResource类指定了配置文件是位于类路径下的bean.xml,然后构DefaultListableBeansFactory

对象,并将DefaultListableBeansFactory对象传递为新构建的XMLBeanDefinitionReader对象,再之后,通过

XMLBeanDefinitionReader对象加载配置文件,最后通过DefaultListableBeansFactory对象中的getBean()方法从IoC

容器中获取了Bean。

(7)运行BeanTest.java,结果如下:

(8)在包下面创建一个ApplicationTest类:

package com.loster.li;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ApplicationTest {
	public static void main(String[] args){
		ClassPathXmlApplicationContext context = new 
				ClassPathXmlApplicationContext("com/loster/li/bean.xml");
		
		Book book = (Book)context.getBean("book");
		System.out.println(book.getName());
		System.out.println(book.getAuthor());
		System.out.println(book.getPublishHouse());
		System.out.println(book.getPrice());
	}
}
(9)运行ApplicationTest.java,结果如下:



   通过上面的例子,可以看出,通过ApplicationTest装载配置与BeanFactory可以达到相同的效果,而且前者的操作更

加简单便捷。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值