- 浏览: 68181 次
- 来自: 北京
文章分类
最新评论
-
love_miaohong:
tomcat工作原理(第二章)A Simple Servlet Container -
dreamkyh:
好犀利的测试驱动啊,vo我还是不太明白,能帮忙解释下嘛
测试驱动开发(第二节)
(一)国际化:
Spring在国际化方面提供了良好的支持,ApplicationContext继承了org.springframework.context.MessageResource接口,使用getMessage()的各个方法来获取信息资源,从而是实现国际化的目的。
当ApplicationContext被加载的时候,它会自动查找定义在XML中定义的messageResource,spring约定这个bean必须被定义为messageSource。开发人员可以通过org.springframework.context.support.ResourcebundleMessageSource来取得国际化信息。
示例代码:
配置文件:
<!-- 在以下代码中定义了,定义了一个id为messageSource的Bean,
这个Bean的来源是org.springframework.context.support.ResourceBundleMessageSource,设定Bean的basename
为messages,意味着存放信息资源文件的文档的名称为messages.properties 或者 messages.class
-->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<!-- 国际化支持的定义在文件名为messages的文件中 -->
<value>messages</value>
</property>
</bean>
test方法:
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:config.xml");
//设定当前时间
Object[] objects = new Object[]{"HelloWorld",Calendar.getInstance().getTime()};
//国际化支持
String msg = context.getMessage("HelloWorld", objects,Locale.CHINA);
System.out.println("msg=========="+msg);
编写messages.properties配置文件:
##{0}和{1}表示,当外部传入参数时,传入值存放的位置
HelloWorld = 问候语:{0} 问候时间:{1}
运行Test程序,发现输出的内容与要求的不一致,这是Java本身在转码的过程中出现了问题,可以通过转码来解决。
1、将messages.properties拷贝到c盘根目录下,然后在windows命令行窗口输入如下命令:
C:\> native2ascii messages.properties messages.txt
这时在c盘根目录下会产生一个messages.txt文件、
将messages.txt中的内容复制到messages.properties中,覆盖原来的内容。
运行即可。
如果想提供对英语支持,可以加入messages_en_US.properties,
文件内容为:HelloWorld=Language {0} Time {1}
然后修改测试程序,将Locale换为US即可。
(二)资源访问:
Spring提供了对资源文件的存取,ApplicationContext继承了ResourceLoader接口,开发人员可以使用getResource()方法指定资源文件的URL来存取。
1、通过虚拟路径来存取。如果资源文件在classpath下,可以通过如下方式来获取:
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:config.xml");
Resource res = context.getResource("classpath:messages.properties"); //classpath是spring约定的URL的虚拟路径。
2、通过实际路径来存取:
指定标准的url,如“file:”或“http:”
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:config.xml");
Resource res = context.getResource("file:d:/eclipse/workspace/myApp/WEB-INF/src/messages.properties");
3、通过相对路径来存取
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:config.xml");
Resource res = context.getResource("WEB-INF/src/messages.properties");
当通过ApplicationContext获取一个Resource后,就可以通过getFile来来存取资源文件的内容了,可以通过exists()来检查资源文件是否存在;通过isOpen()检查资源文件是否被打开;通过getURL()返回资源文件的URL。
(三)事件传递
ApplicationContext的事件处理是通过ApplicationEvent和ApplicationListener的接口来提供的。通过ApplicationContext的publishEvent()方法来通知ApplicationListener.
一个输出日志信息的示例:
(1)一个继承ApplicationEvent的类:
package com.spring.event;
import org.springframework.context.ApplicationEvent;
public class LogEvent extends ApplicationEvent {
public LogEvent(Object msg) {
super(msg);
}
}
(2)定义一个实现ApplicationListener的类:
package com.spring.event;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
public class LogListener implements ApplicationListener{
public void onApplicationEvent(ApplicationEvent event) {
if(event instanceof LogEvent) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//
sdf.setLenient(false);
String currentDate = sdf.format(new Date());
System.out.println("currDate=="+currentDate);
}
}
}
(3)一个实现ApplicationContextAware的类Log:
package com.spring.event;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class Log implements ApplicationContextAware {
private ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;
}
public int log(String log) {
LogEvent logEvent = new LogEvent(log);
this.applicationContext.publishEvent(logEvent);
return 0;
}
}
(4)配置文件:
<bean id="log" class="com.spring.event.Log"/>
<bean id="listener" class="com.spring.event.LogListener"/>
(5)测试程序:
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:config.xml");
Log log = (Log)context.getBean("log");
log.log("gf");
上述代码只是为了说明Spring的事件传递功能, 其实利用Spring 的AOP实现日志输出会更好。
发表评论
-
CharacterEncodingFilter作用
2012-06-28 15:41 0CharacterEncodingFilter作用 ... -
SSH中 Spring quartz定时器的用法
2012-06-28 11:18 0一,首先下载quartz-1.6.0.jar架包,到lib目录 ... -
Spring对持久层的封装
2012-06-07 17:33 01、使用Spring自带的DriverManagerDataS ... -
Bean的生命周期
2012-05-31 17:27 0在spring中,一个bean的生命周期包括bean的定义、b ... -
Unicome KJava平台炫铃订购系统
2012-05-21 11:44 0SSH项目中Spring、Hibernate 1、Sp ... -
Spring学习(六)管理Bean
2012-04-24 15:04 769(一)使用BeanWrapper管理Bean: 在org.s ... -
Spring学习(自动装配和依赖检查)
2012-04-23 18:33 0一般情况下,自动装配和依赖检查结合使用。 -
Spring学习(四)
2012-04-23 18:21 692在Spring中使用Bean的方式有三种: (1)BeanWr ... -
Spring学习(三)Spring的核心容器
2012-04-16 17:13 631Spring的核心是IOC,其目的是提供一种无侵入式的框架。 -
Spring学习(二)依赖注入的三种方式
2012-04-16 16:08 734依赖注入的意义:让组件依赖于抽象,当组件要与其他实际对象发生依 ... -
Spring学习(一)一个简单的Spring应用程序
2012-04-13 17:45 8701、在MyEclipse中创建一个web project,命名 ... -
SSH框架搭建过程解析(以自己的项目出发)
2012-04-06 15:59 0(1)Hibernate 对于dao层,首先是有hiberna ... -
Java缓存实现与Spring托管(一)
2012-03-06 15:50 638EHCache是一个轻量级的、快速的、易于使用的、进程内的 ...
相关推荐
它允许我们定义关注点(如日志、事务管理等)并将其模块化,独立于业务逻辑之外。Spring AOP支持使用注解定义切面,如`@Before`、`@After`和`@Around`,这使得切面的编写更加直观。 Spring MVC是Spring框架中用于...
- **工厂方法模式**(Factory Method): 除了`BeanFactory`之外,Spring还使用了工厂方法模式来进一步解耦对象的创建和使用。例如,可以通过自定义工厂Bean来创建复杂的对象,这使得Spring能够管理和控制更多的对象...
总的来说,Spring作为一个一站式企业级应用框架,其强大的功能涵盖了从基础设施到业务逻辑的各个层面,而且其无侵入性设计使得开发者可以自由选择使用哪些组件,而不会对整体架构造成太大影响。学习和掌握Spring,...
ApplicationContext 除了具备如 BeanFactory 基本的容器管理功能之外,并支援更多应用程式框架的特性,像是资源的取得、讯息解析、事件的处理与传播。 Resource 的取得 解析文字讯息 倾听事件 ...
Spring支持这些工具的集成,并且其事务管理功能也适用于这些ORM工具以及JDBC。 #### 9. Web模块 - **Web Module**: 构建在ApplicationContext模块基础之上,提供了适合Web应用的上下文。它还包括对多种Web任务的...
- Core Container(核心容器)由BeanFactory组成,它是Spring的基础。 - ApplicationContext是核心模块的一部分,它扩展了BeanFactory,提供了更多企业级服务。 14. **Spring管理的Bean**: - Spring管理的Bean...
13. Spring的7个模块:Spring框架的各模块可以独立存在并使用,如Core Container(核心容器)模块中的BeanFactory是Spring的基础,而ApplicationContext模块提供了更丰富的容器功能。 14. Spring中的Bean:Spring...
Spring 框架是Java企业级应用开发的重要组成部分,它提供了许多功能,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。在上述的考试试卷中,涉及了Spring的一些关键知识点,让我们逐一解析。 1. AOP(面向切...
1. **Spring**:Spring是整个框架的基础,提供了核心的依赖注入(DI)和面向切面编程(AOP)功能,是所有Spring家族成员的基础。 2. **SpringMVC**:SpringMVC是Spring框架下的一个子项目,专注于Web应用程序开发,...
每个模块可以独立使用,例如 BeanFactory 是核心模块的一部分,提供了容器的基础,而上下文模块扩展了核心模块,形成了一个更全面的应用程序上下文容器。 8. **Spring Bean** Spring 中的 Bean 并不特指符合 ...
2. Spring框架的IoC容器:Spring的IoC容器(如BeanFactory和ApplicationContext)负责管理组件(Bean)的生命周期和依赖注入,降低组件间的耦合度,提高代码的灵活性和可维护性。 3. 微服务架构:微服务将应用拆分...
ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能,如国际化支持、资源访问、时间传递等。 4. Struts2 的工作流程 Struts2 是一个基于Java的Web应用框架,它提供了MVC...
Spring中的`BeanFactory`和`ApplicationContext`就是工厂模式的应用。 3. **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。Spring JDBC的`JdbcTemplate`和`...