Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Spring»ùÓÚʼþÇý¶¯Ä£Ð͵Ķ©ÔÄ·¢²¼Ä£Ê½´úÂëʵÀýÏê½â
 
×÷Õߣºyaerfeng À´Ô´£ºCSDN ·¢²¼ÓÚ 2015-01-28
  7769  次浏览      27
 

ʼþÇý¶¯Ä£Ðͼò½é

ʼþÇý¶¯Ä£ÐÍÒ²¾ÍÊÇÎÒÃ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×ÔÉíµÄÒì²½Ö§³ÖÀ´ÓÅ»¯¡£

   
7769 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ