今天看了美河夜色狼族的一集Spring视频,是关于Bean的高级部分:消息和事件。以前看书或看视频,只是看了却没有动手编代码,看后就忘了。
前几天看到网友总结的自学经验,觉得说得很好,引文:光看别人骑自行车很容易, 那么是不是看了几百遍别人怎么骑自行车你也就马上能骑着走了呢? 不摔跤是不可能学会的。
还有就是要经常总结:刚才说到会摔跤, 那么这时候就要总结遇到的问题, 这样下次再遇到就不会再去回忆了. 好记性不如烂笔头. 注释, 如果今天不写, 那么以后只会越来越忙, 以后再也没时间写注释了. If you doesn't have time to do it today, then when do you have time to do it tomorrow?
所以今天就写个Spring的消息和事件实例。
1、JavaBean:User.java
package cn.xy.hw; /** */ /** * @author hanwei * */ public class User ... { private String name; private int age; public int getAge() ... { return age; } public void setAge( int age) ... { this .age = age; } public String getName() ... { return name; } public void setName(String name) ... { this .name = name; } }
2、用于国际化的两个消息资源文件:xiyou_en_US.properties和xiyou_zh_CN.properties
userlogin user ... { 0 } login at ... { 1 }
和
userlogin 使用者 ... { 0 } 于 ... { 1 } 登入
自定义下雨的事件:RainEvent.java
package cn.xy.hw; import org.springframework.context.ApplicationEvent; /** */ /** * @author hanwei * */ public class RainEvent extends ApplicationEvent ... { public RainEvent(Object arg0) ... { super (arg0); System.out.println( " 乌云密布、闪电、打雷,紧接着,下起了瓢泼大雨。 " ); } }
下雨事件监听器:RainListener.java
package cn.xy.hw; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; /** */ /** * @author hanwei * */ public class RainListener implements ApplicationListener ... { /**/ /* (non-Javadoc) * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent) */ public void onApplicationEvent(ApplicationEvent arg0) ... { if (arg0 instanceof RainEvent) ... { System.out.println( " 唐僧大喊: " + arg0.getSource() + " 赶快收衣服喽! " ); } } }
配置文件:applicationContext.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.0.xsd " > < bean id = " user " class = " cn.xy.hw.User " abstract = " false " lazy- init = " default " autowire = " default " dependency - check = " default " > < property name = " name " > < value > hanwei </ value > </ property > < property name = " age " > < value > 20 </ value > </ property > </ bean > < bean id = " messageSource " class = " org.springframework.context.support.ResourceBundleMessageSource " abstract = " false " lazy - init = " default " autowire = " default " dependency- check = " default " > < property name = " basename " value = " xiyou " ></ property > </ bean > < bean id = " listener " class = " cn.xy.hw.RainListener " abstract = " false " lazy- init = " default " autowire = " default " dependency - check = " default " > </ bean > </ beans >
测试类:MianTest.java
package cn.xy.hw; import java.util.Calendar; import java.util.Locale; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** */ /** * @author hanwei * */ public class MianTest ... { public static void main(String[] args) ... { ApplicationContext context = new ClassPathXmlApplicationContext( " applicationContext.xml " ); User user = (User)context.getBean( " user " ); Object[] obj = new Object[] ... {user.getName(),Calendar.getInstance().getTime()} ; System.out.println(context.getMessage( " userlogin " ,obj , " 找不到指定模块! " ,Locale.CHINA)); System.out.println(context.getMessage( " userlogin " ,obj , " 找不到指定模块! " ,Locale.US)); context.publishEvent( new RainEvent( " 下雨了! " )); } }
OK了,这是运行测试类的结果:
使用者 hanwei 于 07 - 8 - 26 下午6:14登入 user hanwei login at 8 / 26 / 07 6 : 14 PM 乌云密布、闪电、打雷,紧接着,下起了毛毛细雨。 唐僧大喊:下雨了!赶快收衣服喽! log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j:WARN Please initialize the log4j system properly.