Spring ApplicationContext中的”事件传递“笔记
ApplicationContext中的事件处理是通过ApplicationEvent类和ApplicationListener接口来提供。通过ApplicationContext的publishEvent()方法来通知ApplicationListener。
下面是一个简单的测试例子。。。
第一步、创建一个类LogEvent用来继承ApplicationEvent
package spring.init.log; import org.springframework.context.ApplicationEvent; /** * @author fanbo * ApplicationContext事件传递Log例子 * 继承org.springframework.context.ApplicationEvent; */ public class LogEvent extends ApplicationEvent{ /** * */ private static final long serialVersionUID = 1L; public LogEvent(Object msg) { super(msg); // TODO Auto-generated constructor stub System.out.println("LOGEVENT传过来的值"+msg); } }
第二步、创建一个类LogListener用来实现ApplicationListener接口。
package spring.init.log; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; /** * @author fanbo * ApplicationContext事件传递Log例子 * 实现org.springframework.context.ApplicationListener;接口 */ public class LogListener implements ApplicationListener{ /* * 实现onApplicationEvent(non-Javadoc) * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent) */ public void onApplicationEvent(ApplicationEvent event) { // TODO Auto-generated method stub //如果传递过来的参数是LogEvent的实例, if(event instanceof LogEvent){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowdate = sdf.format(new Date()); System.out.println("当前时间是:"+nowdate); } } }
第三步、创建一个类Log用来实现ApplicationContextAware接口
package spring.init.log; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * @author fanbo * ApplicationContext事件传递Log例子 * 实现org.springframework.context.ApplicationContextAware;接口 */ public class Log implements ApplicationContextAware{ private ApplicationContext applicationContext; /* * 实现接口中的方法 */ public void setApplicationContext(ApplicationContext ac) throws BeansException { // TODO Auto-generated method stub this.applicationContext = ac; } /** * 通过ApplicationContext的publishEvent方法来传递给ApplicationListener * @param log * @return */ public int LogInfo(String log){ LogEvent le = new LogEvent(log); //通过ApplicationContext的publishEvent方法来传递给ApplicationListener this.applicationContext.publishEvent(le); return 1; } }
第四步、配置Bean.xml文件
<!-- ApplicationCOntext事件传递 --> <bean id="log" class="spring.init.log.Log" /> <bean id="listener" class="spring.init.log.LogListener"></bean>
第五步、测试
package spring.init.log; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class LogTest { public static void main(String[] args) { ApplicationContext ac = new FileSystemXmlApplicationContext("conf/xml/config.xml"); Log log = (Log) ac.getBean("log"); log.LogInfo("gf"); } }
输出结果
log4j:WARN No such property [maxFileSize] in org.apache.log4j.ConsoleAppender.
log4j:WARN No such property [file] in org.apache.log4j.ConsoleAppender.
log4j:WARN No such property [append] in org.apache.log4j.ConsoleAppender.
log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.ConsoleAppender.
LOGEVENT传过来的值gf
当前时间是:2013-12-03 13:50:44
此笔记用来自我学习和分享知识,有不对的地方还请大家互相指教