ʼþÇý¶¯Ä£Ðͼò½é
ʼþÇý¶¯Ä£ÐÍÒ²¾ÍÊÇÎÒÃdz£ËµµÄ¹Û²ìÕߣ¬»òÕß·¢²¼-¶©ÔÄÄ£ÐÍ£»Àí½âËüµÄ¼¸¸ö¹Ø¼üµã£º
1.Ê×ÏÈÊÇÒ»ÖÖ¶ÔÏó¼äµÄÒ»¶Ô¶àµÄ¹ØÏµ£»×î¼òµ¥µÄÈ罻ͨÐźŵƣ¬ÐźŵÆÊÇÄ¿±ê£¨Ò»·½£©£¬ÐÐÈË×¢ÊÓ×ÅÐźŵƣ¨¶à·½£©£»
2.µ±Ä¿±ê·¢Ë͸ı䣨·¢²¼£©£¬¹Û²ìÕߣ¨¶©ÔÄÕߣ©¾Í¿ÉÒÔ½ÓÊÕµ½¸Ä±ä£»
3.¹Û²ìÕßÈçºÎ´¦Àí£¨ÈçÐÐÈËÈçºÎ×ߣ¬ÊÇ¿ì×ß/Âý×ß/²»×ߣ¬Ä¿±ê²»»á¹ÜµÄ£©£¬Ä¿±êÎÞÐè¸ÉÉæ£»ËùÒÔ¾ÍËÉÉ¢ñîºÏÁËËüÃÇÖ®¼äµÄ¹ØÏµ¡£
½ÓÏÂÀ´ÏÈ¿´Ò»¸öÓû§×¢²áµÄÀý×Ó£º

Óû§×¢²á³É¹¦ºó£¬ÐèÒª×öÕâô¶àÊ£º
1¡¢¼Ó»ý·Ö
2¡¢·¢È·ÈÏÓʼþ
3¡¢Èç¹ûÊÇÓÎÏ·ÕÊ»§£¬¿ÉÄÜÔùËÍÓÎÏ·´óÀñ°ü
4¡¢Ë÷ÒýÓû§Êý¾Ý
¡¡¡¡
ÎÊÌ⣺
1.UserServiceºÍÆäËûServiceñîºÏÑÏÖØ£¬Ôöɾ¹¦ÄܱȽÏÂé·³£»
2.ÓÐЩ¹¦ÄÜ¿ÉÄÜÐèÒªµ÷ÓõÚÈý·½ÏµÍ³£¬ÈçÔö¼Ó»ý·Ö/Ë÷ÒýÓû§£¬ËÙ¶È¿ÉÄܱȽÏÂý£¬´ËʱÐèÒªÒì²½Ö§³Ö£»Õâ¸öÈç¹ûʹÓÃSpring£¬¿ÉÒÔÇáËɽâ¾ö£¬ºó±ßÔÙ½éÉÜ£»
´ÓÈçÉÏÀý×Ó¿ÉÒÔ¿´³ö£¬Ó¦¸ÃʹÓÃÒ»¸ö¹Û²ìÕßÀ´½âñîÕâЩServiceÖ®¼äµÄÒÀÀµ¹ØÏµ£¬Èçͼ£º

Ôö¼ÓÁËÒ»¸öListenerÀ´½âñîUserServiceºÍÆäËû·þÎñ£¬¼´×¢²á³É¹¦ºó£¬Ö»ÐèҪ֪ͨÏà¹ØµÄ¼àÌýÆ÷£¬²»ÐèÒª¹ØÏµËüÃÇÈçºÎ´¦Àí¡£Ôöɾ¹¦Äܷdz£ÈÝÒס£
Õâ¾ÍÊÇÒ»¸öµäÐ͵Äʼþ´¦ÀíÄ£ÐÍ/¹Û²ìÕߣ¬½âñîÄ¿±ê¶ÔÏóºÍËüµÄÒÀÀµ¶ÔÏó£¬Ä¿±êÖ»ÐèҪ֪ͨËüµÄÒÀÀµ¶ÔÏ󣬾ßÌåÔõô´¦Àí£¬ÒÀÀµ¶ÔÏó×Ô¼º¾ö¶¨¡£±ÈÈçÊÇÒì²½»¹ÊÇͬ²½£¬ÑÓ³Ù»¹ÊÇ·ÇÑӳٵȡ£
ÉÏ±ßÆäʵҲʹÓÃÁËDIP£¨ÒÀÀµµ¹ÖÃÔÔò£©£¬ÒÀÀµÓÚ³éÏ󣬶ø²»ÊǾßÌå¡£
»¹ÊǾÍÊÇʹÓÃÁËIoC˼Ï룬¼´ÒÔǰÖ÷¶¯È¥´´½¨ËüÒÀÀµµÄService£¬ÏÖÔÚÖ»ÊDZ»¶¯µÈ´ý±ðÈË×¢²á½øÀ´¡£
ÆäËûµÄÀý×Ó»¹ÓÐÈçGUIÖеİ´Å¥ºÍ¶¯×÷µÄ¹ØÏµ£¬°´Å¥ºÍ¶¯×÷±¾Éí¶¼ÊÇÒ»ÖÖ³éÏó£¬Ã¿¸ö²»Í¬µÄ°´Å¥µÄ¶¯×÷¿ÉÄܲ»Ò»Ñù£»Èç¡°Îļþ-->н¨¡±´ò¿ªÐ½¨´°¿Ú£»µã»÷¡°¹Ø±Õ¡±°´Å¥¹Ø±Õ´°¿ÚµÈµÈ¡£
Ö÷ҪĿµÄÊÇ£ºËÉÉ¢ñîºÏ¶ÔÏó¼äµÄÒ»¶Ô¶àµÄÒÀÀµ¹ØÏµ£¬Èç°´Å¥ºÍ¶¯×÷µÄ¹ØÏµ£»
ÈçºÎʵÏÖÄØ£¿ÃæÏò½Ó¿Ú±à³Ì£¨¼´ÃæÏò³éÏó±à³Ì£©£¬¶ø·ÇÃæÏòʵÏÖ¡£¼´°´Å¥ºÍ¶¯×÷¿ÉÒÔ¶¨ÒåΪ½Ó¿Ú£¬ÕâÑùËüÁ©µÄÒÀÀµÊÇ×îСµÄ£¨ÈçÔÚJavaÖУ¬Ã»ÓбȽӿڸü³éÏóµÄÁË£©¡£
ÓÐÅóÓÑ»áÎÊ£¬ÎÒ¸Õ¿ªÊ¼Ñ§µÄʱºòÒ²ÊÇÕâÑù£º³éÏóÀ಻ҲÐÐÂ𣿼Çסһ¸öÔÔò£º½Ó¿ÚÄ¿µÄÊdzéÏ󣬳éÏóÀàÄ¿µÄÊǸ´Óã»ËùÒÔÈç¹û½Ó´¥¹ýservlet/struts2/springµÈ¿ò¼Ü£¬´ó¼Ò¶¼Ó¦¸ÃÖªµÀ£º
1.Servlet<-----GenericServlet<-----HttpServlet<------ÎÒÃÇ×Ô¼ºµÄ
2.Action<------ActionSupport<------ÎÒÃÇ×Ô¼ºµÄ
3.DaoInterface<------¡Á¡ÁDaoSupport<-----ÎÒÃÇ×Ô¼ºµÄ
´ÓÉϱߴó¼ÒÓ¦¸ÃÄÜÌå»á³ö½Ó¿Ú¡¢³éÏóÀàµÄÖ÷ҪĿµÄÁË¡£ÏÖÔÚÏëÏëÆäʵºÜ¼òµ¥¡£
ÔÚJavaÖнӿڻ¹Ò»¸ö·Ç³£ÖØÒªµÄºÃ´¦£º½Ó¿ÚÊÇ¿ÉÒÔ¶àʵÏֵģ¬Àà/³éÏóÀàÖ»Äܵ¥¼Ì³Ð£¬ËùÒÔʹÓýӿڿÉÒԷdz£ÈÝÒ×À©Õ¹Ð¹¦ÄÜ£¨»¹¿ÉÒÔʵÏÖËùνµÄmixin£©£¬Àà/³éÏóÀà°ì²»µ½¡£
Java GUIʼþÇý¶¯Ä£ÐÍ/¹Û²ìÕß
³¶Ô¶ÁË£¬ÔÙÀ´¿´¿´Java GUIÊÀ½çÀïµÄʼþÇý¶¯Ä£ÐͰɣº
Èç¹ûд¹ýAWT/Swing³ÌÐò£¬Ó¦¸ÃÖªµÀÆäËùÓÐ×é¼þ¶¼¼Ì³Ð×Ôjava.awt.Component³éÏóÀ࣬ÆäÄÚ²¿ÌṩÁËaddXXXListener(XXXListener
l) ×¢²á¼àÌýÆ÷µÄ·½·¨£¬¼´ComponentÓëʵ¼Ê¶¯×÷Ö®¼äÒÀÀµÓÚXXXListener³éÏó¡£
±ÈÈç»ñÈ¡½¹µãʼþ£¬ºÜ¶à×é¼þ¶¼¿ÉÒÔÓÐÕâ¸öʼþ£¬ÊÇÎÒÃÇÖªµÀ×é¼þ»ñÈ¡µ½½¹µãºóÐèÒªÒ»¸ö´¦Àí£¬ËäȻÿ¸ö×é¼þÈçºÎ´¦ÀíÊÇÌØ¶¨µÄ£¨¾ßÌåµÄ£©£¬µ«ÎÒÃÇ¿ÉÒÔ³éÏóÒ»¸öFocusListener£¬ÈÃËùÓоßÌåʵÏÖËüÈ»ºóÌṩ¾ßÌ嶯×÷£¬ÕâÑù×é¼þÖ»ÐèÒÀÀµÓÚFocusListener³éÏ󣬶ø²»ÊǾßÌå¡£
»¹ÓÐÈçjava.awt.Button£¬ÌṩÁËÒ»¸öaddActionListener(ActionListener
l)£¬ÓÃÓÚ×¢²áµã»÷ºó´¥·¢µÄActionListenerʵÏÖ¡£
×é¼þÊÇÒ»¸ö³éÏóÀ࣬ÆäºÃ´¦Ö÷ÒªÊǸ´Ó㬱ÈÈ縴ÓÃÕâЩ¼àÌýÆ÷µÄ´¥·¢¼°¹ÜÀíµÈ¡£
JavaBean¹æ·¶µÄʼþÇý¶¯Ä£ÐÍ/¹Û²ìÕß
JavaBean¹æ·¶ÌṩÁËJavaBeanµÄPropertyEditorSupport¼°PropertyChangeListenerÖ§³Ö¡£
PropertyEditorSupport¾ÍÊÇÄ¿±ê£¬¶øPropertyChangeListener¾ÍÊǼàÌýÆ÷£¬´ó¼Ò¿ÉÒÔgoogleËÑË÷Ï£¬¾ßÌåÍøÉÏÓкܶàÀý×Ó¡£
JavaÌṩµÄʼþÇý¶¯Ä£ÐÍ/¹Û²ìÕß³éÏó
JDKÄÚ²¿Ö±½ÓÌṩÁ˹۲ìÕßģʽµÄ³éÏó£º
Ä¿±ê£ºjava.util.Observable£¬ÌṩÁËÄ¿±êÐèÒªµÄ¹Ø¼ü³éÏó£ºaddObserver/deleteObserver/notifyObservers()µÈ£¬¾ßÌåÇë²Î¿¼javadoc¡£
¹Û²ìÕߣºjava.util.Observer£¬ÌṩÁ˹۲ìÕßÐèÒªµÄÖ÷Òª³éÏó£ºupdate(Observable
o, Object arg)£¬´Ë´¦»¹ÌṩÁËÒ»ÖÖÍÆÄ£ÐÍ£¨Ä¿±êÖ÷¶¯°ÑÊý¾Ýͨ¹ýargÍÆµ½¹Û²ìÕߣ©/ÀÄ£ÐÍ£¨Ä¿±êÐèÒª¸ù¾Ýo×Ô¼ºÈ¥ÀÊý¾Ý£¬argΪnull£©¡£
ÒòÎªÍøÉϽéÉܵķdz£¶àÁË£¬ÇëgoogleËÑË÷Á˽âÈçºÎʹÓÃÕâ¸ö³éÏó¼°ÍÆ/ÀÄ£Ð͵ÄÓÅȱµã¡£
½ÓÏÂÀ´ÊÇÎÒÃǵÄÖØµã£ºspringÌṩµÄʼþÇý¶¯Ä£ÐÍ¡£
SpringÌṩµÄʼþÇý¶¯Ä£ÐÍ/¹Û²ìÕß³éÏó
Ê×ÏÈ¿´Ò»ÏÂSpringÌṩµÄʼþÇý¶¯Ä£ÐÍÌåϵͼ£º
ʼþ
¾ßÌå´ú±íÕßÊÇ£ºApplicationEvent£º
1¡¢Æä¼Ì³Ð×ÔJDKµÄEventObject£¬JDKÒªÇóËùÓÐʼþ½«¼Ì³ÐËü£¬²¢Í¨¹ýsourceµÃµ½Ê¼þÔ´£¬±ÈÈçÎÒÃǵÄAWTʼþÌåϵҲÊǼ̳Ð×ÔËü£»
2¡¢ÏµÍ³Ä¬ÈÏÌṩÁËÈçÏÂApplicationEventʼþʵÏÖ£º

Ö»ÓÐÒ»¸öApplicationContextEvent£¬±íʾApplicationContextÈÝÆ÷ʼþ£¬ÇÒÆäÓÖÓÐÈçÏÂʵÏÖ£º
1.ContextStartedEvent£ºApplicationContextÆô¶¯ºó´¥·¢µÄʼþ£»£¨Ä¿Ç°°æ±¾Ã»ÓÐÈκÎ×÷Óã©
2.ContextStoppedEvent£ºApplicationContextÍ£Ö¹ºó´¥·¢µÄʼþ£»£¨Ä¿Ç°°æ±¾Ã»ÓÐÈκÎ×÷Óã©
3.ContextRefreshedEvent£ºApplicationContext³õʼ»¯»òË¢ÐÂÍê³Éºó´¥·¢µÄʼþ£»£¨ÈÝÆ÷³õʼ»¯Íê³Éºóµ÷Óã©
4.ContextClosedEvent£ºApplicationContext¹Ø±Õºó´¥·¢µÄʼþ£»£¨ÈçwebÈÝÆ÷¹Ø±Õʱ×Ô¶¯»á´¥·¢springÈÝÆ÷µÄ¹Ø±Õ£¬Èç¹ûÊÇÆÕͨjavaÓ¦Óã¬ÐèÒªµ÷ÓÃctx.registerShutdownHook();×¢²áÐéÄâ»ú¹Ø±ÕʱµÄ¹³×Ó²ÅÐУ©
×¢£ºorg.springframework.context.support.AbstractApplicationContext³éÏóÀàʵÏÖÁËLifeCycleµÄstartºÍstop»Øµ÷²¢·¢²¼ContextStartedEventºÍContextStoppedEventʼþ£»µ«ÊÇÎÞÈκÎʵÏÖµ÷ÓÃËü£¬ËùÒÔĿǰÎÞÈκÎ×÷Óá£
Ä¿±ê£¨·¢²¼Ê¼þÕߣ©
¾ßÌå´ú±íÕßÊÇ£ºApplicationEventPublisher¼°ApplicationEventMulticaster£¬ÏµÍ³Ä¬ÈÏÌṩÁËÈçÏÂʵÏÖ£º

1¡¢ApplicationContext½Ó¿Ú¼Ì³ÐÁËApplicationEventPublisher£¬²¢ÔÚAbstractApplicationContextʵÏÖÁ˾ßÌå´úÂ룬ʵ¼ÊÖ´ÐÐÊÇίÍиøApplicationEventMulticaster£¨¿ÉÒÔÈÏΪÊǶಥ£©£º
public void publishEvent(ApplicationEvent event) { //Ê¡ÂÔ²¿·Ö´úÂë } getApplicationEventMulticaster().multicastEvent(event); if (this.parent != null) { this.parent.publishEvent(event); } } |
ÎÒÃdz£ÓõÄApplicationContext¶¼¼Ì³Ð×ÔAbstractApplicationContext£¬ÈçClassPathXmlApplicationContext¡¢XmlWebApplicationContextµÈ¡£ËùÒÔ×Ô¶¯ÓµÓÐÕâ¸ö¹¦ÄÜ¡£
2¡¢ApplicationContext×Ô¶¯µ½±¾µØÈÝÆ÷ÀïÕÒÒ»¸öÃû×ÖΪ¡±¡°µÄApplicationEventMulticasterʵÏÖ£¬Èç¹ûûÓÐ×Ô¼ºnewÒ»¸öSimpleApplicationEventMulticaster¡£ÆäÖÐSimpleApplicationEventMulticaster·¢²¼Ê¼þµÄ´úÂëÈçÏ£º
public void multicastEvent(final ApplicationEvent event) { for (final ApplicationListener listener : getApplicationListeners(event)) { Executor executor = getTaskExecutor(); if (executor != null) { executor.execute(new Runnable() { public void run() { listener.onApplicationEvent(event); } }); } else { listener.onApplicationEvent(event); } } } |
´ó¼Ò¿ÉÒÔ¿´µ½Èç¹û¸øËüÒ»¸öexecutor£¨java.util.concurrent.Executor£©£¬Ëü¾Í¿ÉÒÔÒì²½Ö§³Ö·¢²¼Ê¼þÁË¡£·ðÔò¾ÍÊÇͨ¹ý·¢ËÍ¡£
ËùÒÔÎÒÃÇ·¢ËÍʼþÖ»ÐèҪͨ¹ýApplicationContext.publishEvent¼´¿É£¬Ã»±ØÒªÔÙ´´½¨×Ô¼ºµÄʵÏÖÁË¡£³ý·ÇÓбØÒª¡£
¼àÌýÆ÷
¾ßÌå´ú±íÕßÊÇ£ºApplicationListener
1¡¢Æä¼Ì³Ð×ÔJDKµÄEventListener£¬JDKÒªÇóËùÓмàÌýÆ÷½«¼Ì³ÐËü£¬±ÈÈçÎÒÃǵÄAWTʼþÌåϵҲÊǼ̳Ð×ÔËü£»
2¡¢ApplicationListener½Ó¿Ú£º
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { void onApplicationEvent(E event); } |
ÆäÖ»ÌṩÁËonApplicationEvent·½·¨£¬ÎÒÃÇÐèÒªÔڸ÷½·¨ÊµÏÖÄÚ²¿ÅжÏʼþÀàÐÍÀ´´¦Àí£¬Ò²Ã»ÓÐÌṩ°´Ë³Ðò´¥·¢¼àÌýÆ÷µÄÓïÒ壬ËùÒÔSpringÌṩÁËÁíÒ»¸ö½Ó¿Ú£¬SmartApplicationListener£º
public interface SmartApplicationListener extends ApplicationListener<ApplicationEvent>, Ordered { //Èç¹ûʵÏÖÖ§³Ö¸ÃʼþÀàÐÍ ÄÇô·µ»Øtrue boolean supportsEventType(Class<? extends ApplicationEvent> eventType); //Èç¹ûʵÏÖÖ§³Ö¡°Ä¿±ê¡±ÀàÐÍ£¬ÄÇô·µ»Øtrue boolean supportsSourceType(Class<?> sourceType); //˳Ðò£¬¼´¼àÌýÆ÷Ö´ÐеÄ˳Ðò£¬ÖµÔ½Ð¡ÓÅÏȼ¶Ô½¸ß int getOrder(); } |
¸Ã½Ó¿Ú¿É·½±ãʵÏÖÈ¥ÅжÏÖ§³ÖµÄʼþÀàÐÍ¡¢Ä¿±êÀàÐÍ£¬¼°Ö´ÐÐ˳Ðò¡£
Springʼþ»úÖÆµÄ¼òµ¥Àý×Ó
±¾Àý×ÓÄ£ÄâÒ»¸ö¸ø¶à¸öÈË·¢ËÍÄÚÈÝ£¨ÀàËÆÓÚ±¨Ö½ÐÂÎÅ£©µÄÀý×Ó¡£
1¡¢¶¨Òåʼþ
package com.zuidaima.hello; import org.springframework.context.ApplicationEvent; public class ContentEvent extends ApplicationEvent { public ContentEvent(final String content) { super(content); } } |
·Ç³£¼òµ¥£¬Èç¹ûÓû§·¢ËÍÄÚÈÝ£¬Ö»ÐèҪͨ¹ý¹¹ÔìÆ÷´«ÈëÄÚÈÝ£¬È»ºóͨ¹ýgetSource¼´¿É»ñÈ¡¡£
2¡¢¶¨ÒåÎÞÐò¼àÌýÆ÷
Ö®ËùÒÔ˵ÎÞÐò£¬ÀàËÆÓÚAOP»úÖÆ£¬Ë³ÐòÊÇÎÞ·¨È·¶¨µÄ¡£
package com.zuidaima.hello; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; @Component public class LisiListener implements ApplicationListener<ApplicationEvent> { @Override public void onApplicationEvent(final ApplicationEvent event) { if(event instanceof ContentEvent) { System.out.println("ÀîËÄÊÕµ½ÁËеÄÄÚÈÝ£º" + event.getSource()); } } } |
1¡¢Ê¹ÓÃ@Compoent×¢²áBean¼´¿É£»
2¡¢ÔÚʵÏÖÖÐÐèÒªÅжÏeventÀàÐÍÊÇContentEvent²Å¿ÉÒÔ´¦Àí£»
¸ü¼òµ¥µÄ°ì·¨ÊÇͨ¹ý·ºÐÍÖ¸¶¨ÀàÐÍ£¬ÈçÏÂËùʾ
package com.zuidaima.hello; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; @Component public class ZhangsanListener implements ApplicationListener<ContentEvent> { @Override public void onApplicationEvent(final ContentEvent event) { System.out.println("ÕÅÈýÊÕµ½ÁËеÄÄÚÈÝ£º" + event.getSource()); } } |
3¡¢¶¨ÒåÓÐÐò¼àÌýÆ÷
ʵÏÖSmartApplicationListener½Ó¿Ú¼´¿É¡£
package com.zuidaima.hello; import org.springframework.context.ApplicationEvent; import org.springframework.context.event.SmartApplicationListener; import org.springframework.stereotype.Component; @Component public class WangwuListener implements SmartApplicationListener { @Override public boolean supportsEventType(final Class<? extends ApplicationEvent> eventType) { return eventType == ContentEvent.class; } @Override public boolean supportsSourceType(final Class<?> sourceType) { return sourceType == String.class; } @Override public void onApplicationEvent(final ApplicationEvent event) { System.out.println("ÍõÎåÔÚËïÁù֮ǰÊÕµ½ÐµÄÄÚÈÝ£º" + event.getSource()); } @Override public int getOrder() { return 1; } } |
package com.zuidaima.hello; import org.springframework.context.ApplicationEvent; import org.springframework.context.event.SmartApplicationListener; import org.springframework.stereotype.Component; @Component public class SunliuListener implements SmartApplicationListener { @Override public boolean supportsEventType(final Class<? extends ApplicationEvent> eventType) { return eventType == ContentEvent.class; } @Override public boolean supportsSourceType(final Class<?> sourceType) { return sourceType == String.class; } @Override public void onApplicationEvent(final ApplicationEvent event) { System.out.println("ËïÁùÔÚÍõÎåÖ®ºóÊÕµ½ÐµÄÄÚÈÝ£º" + event.getSource()); } @Override public int getOrder() { return 2; } } |
supportsEventType£ºÓÃÓÚÖ¸¶¨Ö§³ÖµÄʼþÀàÐÍ£¬Ö»ÓÐÖ§³ÖµÄ²Åµ÷ÓÃonApplicationEvent£»
supportsSourceType£ºÖ§³ÖµÄÄ¿±êÀàÐÍ£¬Ö»ÓÐÖ§³ÖµÄ²Åµ÷ÓÃonApplicationEvent£»
getOrder£º¼´Ë³Ðò£¬Ô½Ð¡ÓÅÏȼ¶Ô½¸ß
4¡¢²âÊÔ
4.1¡¢ÅäÖÃÎļþ
<context:component-scan base-package="com.zuidaima"/> |
¾ÍÒ»¾ä»°£¬×Ô¶¯É¨Ãè×¢½âBean¡£
4.2¡¢²âÊÔÀà
package com.zuidaima; import com.zuidaima.hello.ContentEvent; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:spring-config-hello.xml"}) public class HelloIT { @Autowired private ApplicationContext applicationContext; @Test public void testPublishEvent() { applicationContext.publishEvent(new ContentEvent("½ñÄêÊÇÁúÄêµÄ²©¿Í¸üÐÂÁË")); } } |
½Ó×Å»áÊä³ö£º
ÍõÎåÔÚËïÁù֮ǰÊÕµ½ÐµÄÄÚÈÝ£º½ñÄêÊÇÁúÄêµÄ²©¿Í¸üÐÂÁË ËïÁùÔÚÍõÎåÖ®ºóÊÕµ½ÐµÄÄÚÈÝ£º½ñÄêÊÇÁúÄêµÄ²©¿Í¸üÐÂÁË ÀîËÄÊÕµ½ÁËеÄÄÚÈÝ£º½ñÄêÊÇÁúÄêµÄ²©¿Í¸üÐÂÁË ÕÅÈýÊÕµ½ÁËеÄÄÚÈÝ£º½ñÄêÊÇÁúÄêµÄ²©¿Í¸üÐÂÁË |
Ò»¸ö¼òµ¥µÄ²âÊÔÀý×Ó¾ÍÑÝʾÍê±Ï£¬¶øÇÒÎÒÃÇʹÓÃspringµÄʼþ»úÖÆÈ¥Ð´Ïà¹Ø´úÂë»á·Ç³£¼òµ¥¡£
Springʼþ»úÖÆÊµÏÖ֮ǰÌáµ½µÄ×¢²áÁ÷³Ì
¾ßÌåÇëÏÂÔØÔ´´úÂë²Î¿¼com.zuidaima.register°üÀïµÄ´úÂë¡£´Ë´¦ÌùÒ»ÏÂÔ´Âë½á¹¹£º

ÕâÀï½²½âÒ»ÏÂSpring¶ÔÒ첽ʼþ»úÖÆµÄÖ§³Ö£¬ÊµÏÖ·½Ê½ÓÐÁ½ÖÖ£º
1¡¢È«¾ÖÒì²½
¼´Ö»ÒªÊÇ´¥·¢Ê¼þ¶¼ÊÇÒÔÒì²½Ö´ÐУ¬¾ßÌåÅäÖã¨spring-config-register.xml£©ÈçÏ£º
<task:executor id="executor" pool-size="10" /> <!-- Ãû×Ö±ØÐëÊÇapplicationEventMulticasterºÍmessageSourceÊÇÒ»ÑùµÄ£¬Ä¬ÈÏÕÒÕâ¸öÃû×ֵĶÔÏó --> <!-- Ãû×Ö±ØÐëÊÇapplicationEventMulticaster£¬ÒòΪAbstractApplicationContextĬÈÏÕÒ¸ö --> <!-- Èç¹ûÕÒ²»µ½¾ÍnewÒ»¸ö£¬µ«²»ÊÇÒì²½µ÷ÓöøÊÇͬ²½µ÷Óà --> <bean id="applicationEventMulticaster" class="org.springframework.context.event.SimpleApplicationEventMulticaster"> <!-- ×¢ÈëÈÎÎñÖ´ÐÐÆ÷ ÕâÑù¾ÍʵÏÖÁËÒì²½µ÷ÓÃ
£¨È±µãÊÇÈ«¾ÖµÄ£¬ÒªÃ´È«²¿Òì²½£¬ÒªÃ´È«²¿Í¬²½£¨É¾³ýÕâ¸öÊôÐÔ¼´ÊÇͬ²½£©£© --> <property name="taskExecutor" ref="executor"/> </bean> |
ͨ¹ý×¢ÈëtaskExecutorÀ´Íê³ÉÒì²½µ÷Ó᣾ßÌåʵÏֿɲο¼Ö®Ç°µÄ´úÂë½éÉÜ¡£ÕâÖÖ·½Ê½µÄȱµãºÜÃ÷ÏÔ£ºÒªÃ´´ó¼Ò¶¼ÊÇÒì²½£¬ÒªÃ´´ó¼Ò¶¼²»ÊÇ¡£ËùÒÔ²»ÍƼöʹÓÃÕâÖÖ·½Ê½¡£
2¡¢¸üÁé»îµÄÒì²½Ö§³Ö
spring3ÌṩÁË@Aync×¢½âÀ´Íê³ÉÒì²½µ÷ÓᣴËʱÎÒÃÇ¿ÉÒÔʹÓÃÕâ¸öÐÂÌØÐÔÀ´Íê³ÉÒì²½µ÷Óᣲ»½öÖ§³ÖÒì²½µ÷Ó㬻¹Ö§³Ö¼òµ¥µÄÈÎÎñµ÷¶È£¬±ÈÈçÎÒµÄÏîÄ¿¾ÍÈ¥µôQuartzÒÀÀµ£¬Ö±½ÓʹÓÃspring3Õâ¸öÐÂÌØÐÔ£¬¾ßÌå¿É²Î¿¼spring-config.xml¡£
2.1¡¢¿ªÆôÒì²½µ÷ÓÃÖ§³Ö
<!-- ¿ªÆô@AspectJ AOP´úÀí --> <aop:aspectj-autoproxy proxy-target-class="true"/> <!-- ÈÎÎñµ÷¶ÈÆ÷ --> <task:scheduler id="scheduler" pool-size="10"/> <!-- ÈÎÎñÖ´ÐÐÆ÷ --> <task:executor id="executor" pool-size="10"/> <!--¿ªÆô×¢½âµ÷¶ÈÖ§³Ö @Async @Scheduled--> <task:annotation-driven executor="executor" scheduler="scheduler" proxy-target-class="true"/> |
2.2¡¢ÅäÖüàÌýÆ÷ÈÃÆäÖ§³ÖÒì²½µ÷ÓÃ
@Component public class EmailRegisterListener implements ApplicationListener<RegisterEvent> { @Async @Override public void onApplicationEvent(final RegisterEvent event) { System.out.println("×¢²á³É¹¦£¬·¢ËÍÈ·ÈÏÓʼþ¸ø£º" + ((User)event.getSource()).getUsername()); } } |
ʹÓÃ@Async×¢½â¼´¿É£¬·Ç³£¼òµ¥¡£
ÕâÑù²»½ö¿ÉÒÔÖ§³Öͨ¹ýµ÷Óã¬Ò²Ö§³ÖÒì²½µ÷Ó㬷dz£µÄÁé»î£¬Êµ¼ÊÓ¦ÓÃÍÆ¼ö´ó¼ÒʹÓÃÕâÖÖ·½Ê½¡£
ͨ¹ýÈçÉÏ£¬´óÌåÁ˽âÁËSpringµÄʼþ»úÖÆ£¬¿ÉÒÔʹÓøûúÖÆ·Ç³£¼òµ¥µÄÍê³ÉÈç×¢²áÁ÷³Ì£¬¶øÇÒ¶ÔÓڱȽϺÄʱµÄµ÷Ó㬿ÉÒÔÖ±½ÓʹÓÃSpring×ÔÉíµÄÒì²½Ö§³ÖÀ´ÓÅ»¯¡£
|