读了外国的本书上才知道,"ApplicationContext"对象,才是构建了Spring框架的灵魂。包括全部的"依赖注入"都是在ApplicationContext内部完成的,如果说"依赖注入"是Spring框架的核心概念,那么"ApplicationContext"就是它的核心对象.
ApplicationContext对象是BeanFactory的特化,这里的特化大概意思是说:ApplicationContext对象可以看作是个功能齐全的BeanFactory。"BeanFactory"是充当Spring框架中所有Bean对象的注册表.通常BeanFactory是负责创建Bean对象,并且将各个Bean之间的依赖关系进行关联。一般的应用程序都是与ApplicationContext互交,而不是和BeanFactory互交.ApplicationContext能通过运行BeanFacotoryPostProcessors自动的处理BeanFactory.
ApplicationContext通常使用XML文件进行配置,该文件使用是简单的DTD.
如下:
<?xml version="1.0">
<!DOCTYOE beans PUBLIC"-//SPRING//DTD BEAN//EN" http://www.springframework.org/dtd/spring-beans/dtd>
<beans>
<bean id="cashRegister" class="org.example.CashRegisterImpl">
<property name="priceMatrix" ref="priceMatrixBean"/>
</bean>
<bean id="priceMatrixBean" class="org.example.PriceMatrixImpl"/>
</beans>
BeanFactory对象可以有多种实例化的方式,虽然大多数情况下不用我们进行创建,但是还是可以有几种实例化的方式。
它可以InputStream作为参数实例化,也可以将org.springframework.core.io.Resource它实例化.有多种:ClassPathResource、 FileSystemResource、InputStreamResource、ServletContextResource、 UrlResource。可根据不同情况下使用.
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
HelloBean hello = (HelloBean) factory.getBean("helloBean");
and
ClassPathResource res = new ClassPathResource("applicationConxtext.xml");
XmlBeanFactory factory = new XmlBeanFactory(res);
or
InputStream is = new FileInputStream("application.xml");
XmlBeanFactory factory = new XmlBeanFactory(is);
or
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] {"applicationContext.xml", "applicationContext-two.xml"});
BeanFactory factory = (BeanFactory) appContext;
Beans element can be defined in multiple bean, if you want to take out once all of the bean can be used org.springframework.beans.factory.ListableBeanFactory
for example:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="helloBeanOfJustin" class="onlyfun.caterpillar.HelloBean">
<property name="helloWord"><value>Hello!Justin!</value></property>
</bean>
<bean id="helloBeanOfcaterpillar" class="onlyfun.caterpillar.HelloBean">
<property name="helloWord"><value>Hello!caterpillar!</value></property>
</bean>
</beans>
Resource resource = new ClassPathResource("bean.xml");
ListableBeanFactory factory = new XmlBeanFactory(resource);
Map helloBeans = factory.getBeansOfType(HelloBean.class, false, false);
If all of the "bean" is defined in an applicationContext the application is for a small can, but if the big applications, the required bean object is very large, and this time you can use: org.springframework.beans.factory. xml.XmlBeanDefinitionReader to carry out multiple bean.xml the load, it needs to org.springframework.beans.factory.support.BeanDefinitionRegistry object as a build-time parameter。
for example:
BeanDefinitionRegistry reg = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(reg);
// 载入bean
reader.loadBeanDefinitions(new ClassPathResource("bean1.xml"));
reader.loadBeanDefinitions(new ClassPathResource("bean2.xml"));
....
// 获取Bean
BeanFactory bf = (BeanFactory) reg;
Object o = bf.getBean("helloBean");
....
ApplicationContext继承了org.springframework.context.MessageResource对象。
可以使用getMessage()的各种方法来取得资源,可以实现国际化。MessageResource的一个子类,org.springframework.context.support.ResourceBundleMeaageSource,可以用它来获取资源文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename"> //资源文件的名字
<value>messages</value
</property>
</bean>
</beans>
>//设定了文件前缀,可以是messages_en_US.properties,messages_zh_TW.properties、messages_*.properties等等。
messages_en_US.properties内容:
userlogin=User {0} login at {1}
message_zh_TW.properties內容:
userlogin=使用者 {0} 於 {1} 登入
native2ascii message_zh_TW.properties message_zh_TW.txt
import java.util.*;
import org.springframework.context.*;
import org.springframework.context.support.*;
public class Test {
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Object[] arguments = new Object[] {"adminsun", Calendar.getInstance().getTime()};
System.out.println(context.getMessage("userlogin", arguments, Locale.US));
System.out.println(context.getMessage("userlogin", arguments, Locale.TAIWAN));
}
}
ClassPathXmlApplicationContext继承了ApplicationContext。读取xml获取bean对象。给getMessage()方法传递参数。
log4j:WARN No appenders could be found for logger (org.springframework.beans.factory.xml.XmlBeanDefinitionReader).
log4j:WARN Please initialize the log4j system properly.
User 良葛格 login at 10/28/04 12:52 PM
使用者 adminsun 于 2004/10/28 下午 12:52 登入
分享到:
相关推荐
### Spring框架中ApplicationContext的事件传递机制详解 #### 一、引言 在Spring框架中,事件处理机制是一项非常重要的功能,它使得应用可以更加灵活地响应各种系统内部或外部的事件变化。本篇文章将深入探讨...
ApplicationContext 是 Spring 框架中的核心组件之一,负责加载和管理应用程序中的 Bean 对象。在 Web 应用程序中,ApplicationContext 的加载机制是非常重要的, Spring 提供了多种方式来加载 ApplicationContext。...
Spring框架作为Java EE开发中非常流行和强大的框架之一,为Java应用提供了全面的基础设施支持。在Spring中,ApplicationContext(应用程序上下文)是容器的核心,负责配置和管理应用中对象的生命周期和依赖关系。在...
手册中还涵盖了Spring框架的最佳实践,包括如何组织项目结构、如何有效利用注解、如何优化性能等方面,这些都是开发者在实际开发中应遵循的原则。 总之,《Spring框架开发参考中文手册》是Spring初学者和进阶者的...
在Spring框架中,ApplicationContext和BeanFactory是两种不同的bean容器,它们各自有其特性和应用场景,理解二者的区别对于深入学习和使用Spring至关重要。 首先,BeanFactory是Spring中最基础的bean管理容器,它...
在Spring框架中,`applicationContext.xml`是应用上下文的核心配置文件,用于定义bean的创建、依赖关系以及各种服务的配置。这篇博文“Spring 2.5 - applicationContext.xml提示信息的配置”主要探讨了如何在Spring ...
ApplicationContext是Spring框架中的核心组件之一,它是Bean工厂的高级形式,提供了更多企业级的功能。在这个主题中,我们将深入探讨ApplicationContext的内部机制和关键功能。 ApplicationContext的主要职责是加载...
在Android开发中,Spring框架可能并不像在Java服务器端那样被广泛熟知,但它确实为移动应用提供了一套强大的工具集。Spring for Android是Spring.io针对Android平台推出的一个框架,旨在帮助开发者构建高质量、可...
Spring框架是Java企业级应用开发中的核心框架,它为应用程序提供了一个全面的基础设施,使得开发者可以专注于业务逻辑的实现,而无需关注底层的繁琐细节。Spring框架以其模块化的结构、依赖注入(Dependency ...
在Spring框架中,`applicationContext.xml`是核心的配置文件,它定义了bean的实例化、依赖注入、服务的装配以及整个应用上下文的行为。在Spring 2.5版本中,这个配置文件引入了许多增强的功能,提升了开发效率和灵活...
Spring框架是中国著名的Java企业级应用开发框架,由Rod Johnson在其著作《Expert One-on-One J2EE Design and Development》中首次提出。Spring以其轻量级、模块化和强大的依赖注入特性而闻名,它极大地简化了Java...
Spring框架是Java开发中最常用的轻量级框架之一,它的出现极大地简化了企业级应用的开发。本教程将详细讲解如何进行第一次Spring框架的搭建,帮助初学者快速入门。 首先,理解Spring的核心特性至关重要。Spring主要...
在本篇【Spring框架web项目实战全代码分享】中,我们将深入探讨如何使用Spring框架构建一个Java Web项目。首先,我们需要了解Spring的核心概念,它是一个轻量级的、全面的开源框架,主要用于简化企业级应用的开发。...
- **Bean Factory**:Bean Factory是Spring框架中最基本的容器,它负责创建Bean实例、配置Bean属性以及管理Bean的生命周期。 - **ApplicationContext**:ApplicationContext是Bean Factory的扩展,提供了更多面向...
在Spring框架中,`ApplicationContext`不仅是一个容器,用于管理Bean的生命周期和依赖注入,它还提供了事件发布和监听的功能。这个特性使得Spring应用能够实现组件间的异步通信,类似于消息队列(MQ)的工作模式。...
Spring框架是Java开发领域中最广泛使用的轻量级框架之一,以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)能力而著称。本文将深入探讨Spring框架的核心...
在Spring框架中,`ApplicationContext`是一个非常重要的接口,它提供了加载和管理Bean定义,以及获取Bean实例的功能。本文将深入探讨如何在Spring中获取`ApplicationContext`的公用方法,并结合提供的两个文件名`...
Spring框架是中国Java开发领域中最广泛使用的轻量级框架之一,它以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)的核心特性,极大地简化了企业级应用的开发。...
在Spring框架中,ApplicationContext是核心接口,它扮演着应用程序上下文的角色,负责管理和提供bean实例。标题提到的"spring为ApplicationContext提供的3种实现",是指Spring框架中用于初始化和管理bean的三种主要...