一 ApplicationContext简介
ApplicationContext除了包含BeanFactory的所有功能外,还提供了更完善的框架功能,比如国际化支持,资源访问和事件传递等
ApplicationContext继承于ListableBeanFactory,HierarchicalBeanFactory,MessageSource,
ApplicationEventPublisher,ResourcePatternResolver。其中ListableBeanFactory和HierarchicalBeanFactory前面已经介绍过,我们现在着重看后面三个与ApplicationContext本身。
二 MessageSource
Spring利用MessageSource接口实现国际化。
MessageSource接口的主要包括了三个取得消息的方法,细化了取消息操作的不同需求。一种默认消息,不报一场;一种没有默认 消息,要抛出异常;还有一种用MessageSourceResolvable封装需要传递的参数,封装的参数包括默认的消息,为了防止无效的默认消息,还是提供了异常。
String getMessage(String code, Object[] args, String defaultMessage, Locale locale);
假如我们现在定义了一个资源文件,其中一项配置为
msg.argument.required={0}\u\u4E\u5FC5\u586B\u9879\! #{0}是个必填项!
其中code就对应于“msg.argument.required”,而args则对应于{0},defalutMessage表示默认消息,如果取得消息失败,则采用默认消息
String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException;
String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;
三 ApplicationEventPublisher
Spring利用ApplicationEventPublisher接口实现事件传播。ApplicationEventPublisher接口只定义了一个方法:
void publishEvent(ApplicationEvent event);
通过这个方法,可以将event通知到系统内所有的ApplicationListener
四 ResourcePatternResolver
Spring通过ResourceLoader加载资源路径,而ResourcePatternResolver继承于ResourceLoader。使用ResourcePatternResolver加载资源默认是在classpath路径下寻找
String CLASSPATH_ALL_URL_PREFIX = "classpath*:";
根据正则表达式匹配资源
Resource[] getResources(String locationPattern) throws IOException;
五 ApplicationContext
String getId();
返回Application上下文的名字
String getDisplayName();
返回Application上下文第一次加载的时间
long getStartupDate();
返回Application上下文的父类上下文,如果没有父类并且是上下文分层中的根,返回null
ApplicationContext getParent();
暴露Application上下文中AutowireCapableBeanFactory中的功能
AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
2 加载spring配置文件的方法
1)如果配置文件放在类路径下,则优先使用ClassPathXmlApplicationContext实现类,如下所示:
ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:beans.xml");
2)如果配置文件放在文件系统的路径下,则优先使用FileSystemXmlApplicationContext实现类,如下所示:
ApplicationContext ctx1=new FileSystemXmlApplicationContext("com/swust/context/beans.xml");
3)Spring 3中支持基于类注解的配置方式,一个标注了@Configuration注解的POJO就可提供Spring需要的Bean配置信息,所以Spring提供了专门的ApplicationContext实现类:AnnotationConfigApplicationContext,如下所示:
ApplicationContext ctx=new AnnotationConfigApplicationContext(Beans.class);
Beans.class表示一个用@Configuration注解的类
4)WebApplicationContext是专门为web应用准备的,它允许从相对于web根目录的路径中装配配置文件。但是它与BeanFactory和ApplicationContext的区别在于:他需要先启动web容器。使用XmlWebApplicationContext实现类启动spring容器。