事件实现依赖ApplicationEvent抽象类和ApplicationListener接口,applicationContext发布(publishEvent)了事件以后,ApplicationListener的onApplicationEvent监听之:
Java代码如下:
xml配置如下:
测试类如下:
打印结果如下:
我已收到通知:373045912@qq.com要发邮件了。。
Java代码如下:
01 | package com.uqee.spring.applicationContext; |
02 |
03 | import org.apache.commons.logging.Log; |
04 | import org.apache.commons.logging.LogFactory; |
05 | import org.springframework.context.ApplicationEvent; |
06 |
07 | public class EmailEvent extends ApplicationEvent |
08 | { |
09 | private String address; |
10 | private String text; |
11 | private String email; |
12 | public String getEmail() |
13 | { |
14 | return email; |
15 | } |
16 |
17 | public void setEmail(String email) |
18 | { |
19 | this .email = email; |
20 | } |
21 |
22 | private Log logger = LogFactory.getLog(EmailEvent. class ); |
23 |
24 | public EmailEvent(Object source) |
25 | { |
26 | super (source); |
27 | // TODO Auto-generated constructor stub |
28 | } |
29 | |
30 | public EmailEvent(String email,String address,String text) |
31 | { |
32 | super (email); |
33 | this .email = email; |
34 | this .address = address; |
35 | this .text = text; |
36 | } |
37 | |
38 | public void printInfo() |
39 | { |
40 | // System.out.println("Send this Email, address:"+address+" text:"); |
41 | logger.info( "Send this Email, address:" +address+ " text:" +text); |
42 | } |
43 |
44 | /** |
45 | * |
46 | */ |
47 | private static final long serialVersionUID = 1667085258090884727L; |
48 |
49 | } |
01 | package com.uqee.spring.applicationContext; |
02 |
03 | import org.springframework.context.ApplicationEvent; |
04 | import org.springframework.context.ApplicationListener; |
05 |
06 | public class EmailNotifier implements ApplicationListener |
07 | { |
08 |
09 | private String notificationAddress; |
10 | |
11 | |
12 | public String getNotificationAddress() |
13 | { |
14 | return notificationAddress; |
15 | } |
16 |
17 |
18 | public void setNotificationAddress(String notificationAddress) |
19 | { |
20 | this .notificationAddress = notificationAddress; |
21 | } |
22 |
23 |
24 | @Override |
25 | public void onApplicationEvent(ApplicationEvent event) |
26 | { |
27 | // TODO Auto-generated method stub |
28 | if (event instanceof EmailEvent) |
29 | { |
30 | //notifier apppriate person |
31 | EmailEvent emailEvent = (EmailEvent)event; |
32 | System.out.println( "我已收到通知:" +emailEvent.getEmail()+ "要发邮件了。。" ); |
33 | } |
34 | } |
35 |
36 | } |
01 | package com.uqee.spring.applicationContext; |
02 |
03 | import java.util.List; |
04 |
05 | import org.springframework.beans.BeansException; |
06 | import org.springframework.context.ApplicationContext; |
07 | import org.springframework.context.ApplicationContextAware; |
08 |
09 | public class EmailBean implements ApplicationContextAware |
10 | { |
11 | |
12 | private ApplicationContext ctx = null ; |
13 | public ApplicationContext getCtx() |
14 | { |
15 | return ctx; |
16 | } |
17 |
18 | private List backList; |
19 |
20 | public List getBackList() |
21 | { |
22 | return backList; |
23 | } |
24 |
25 | public void setBackList(List backList) |
26 | { |
27 | this .backList = backList; |
28 | } |
29 |
30 | @Override |
31 | public void setApplicationContext(ApplicationContext applicationContext) |
32 | throws BeansException |
33 | { |
34 | // TODO Auto-generated method stub |
35 | this .ctx = applicationContext; |
36 | } |
37 | |
38 | public void sendEmail(String email,String title,String text) |
39 | { |
40 | if (backList.contains(email)) |
41 | { |
42 | EmailEvent evt = new EmailEvent(email,title, text); |
43 | ctx.publishEvent(evt); |
44 | return ; |
45 | } |
46 | } |
47 | } |
01 | < bean id = "emailer" class = "com.uqee.spring.applicationContext.EmailBean" > |
02 | < property name = "backList" > |
03 | < list > |
04 | < value >ncg2.0@163.com</ value > |
05 | < value >niechanggang@gmail.com</ value > |
06 | < value >373045912@qq.com</ value > |
07 | </ list > |
08 | </ property > |
09 | </ bean > |
10 |
11 | < bean id = "emailNotifier" class = "com.uqee.spring.applicationContext.EmailNotifier" > |
12 | < property name = "notificationAddress" > |
13 | < value >qingwa@163.com</ value > |
14 | </ property > |
15 | </ bean > |
1 | ApplicationContext applicationContext = new ClassPathXmlApplicationContext( "applicationContext5.xml" ); |
2 | EmailBean emailer = (EmailBean)applicationContext.getBean( "emailer" ); |
3 | emailer.sendEmail( "373045912@qq.com" , "邮件头" , "邮件正文" ); |
我已收到通知:373045912@qq.com要发邮件了。。