Õ¾ÄÚËÑË÷: ÇëÊäÈëËÑË÷¹Ø¼ü´Ê

µ±Ç°Ò³Ãæ: ¿ª·¢×ÊÁÏÊ×Ò³ ¡ú Java רÌâ ¡ú SpringÊÂÎñ´¦Àí¼°ÆäAOP¿ò¼ÜµÄÄÚÄ»

SpringÊÂÎñ´¦Àí¼°ÆäAOP¿ò¼ÜµÄÄÚÄ»

ÕªÒª: Spring¿ò¼ÜÖгɹ¦ÎüÒýÈ˵ÄÒ»µã¾ÍÊÇÈÝÆ÷ÊÂÎñµÄ¹ÜÀí£¬ÌṩÁËÒ»¸öÇáÁ¿¼¶µÄÈÝÆ÷ÊÂÎñ´¦Àí£¬Õë¶ÔµÄ¶ÔÏóÊÇÆÕͨµÄjavaÀà
¡¡¡¡Spring¿ò¼ÜÖгɹ¦ÎüÒýÈ˵ÄÒ»µã¾ÍÊÇÈÝÆ÷ÊÂÎñµÄ¹ÜÀí£¬ÌṩÁËÒ»¸öÇáÁ¿¼¶µÄÈÝÆ÷ÊÂÎñ´¦Àí£¬Õë¶ÔµÄ¶ÔÏóÊÇÆÕͨµÄjavaÀ࣬ʹÓÃSpringÊÂÎñ¹ÜÀíµÄ»°£¬Äã¿ÉÒÔ°´ÕÕ×Ô¼ºµÄÒµÎñ°ÑһЩÏà¹ØµÄ·½·¨ÄÉÈëÆäÊÂÎñ¹ÜÀíÀïÃ棬Õâ¾Í±ÜÃâÁ˳ÌÐòÔ±ÔÚ´¦ÀíÊÂÎñµÄ¹ý³ÌÖз±ËöµÄ¹¤×÷.ͬʱÕâЩҲÊÇejb2.X¹æ·¶ÀïÃæÎüÒýÈ˵ÄÒ»µã£¬ÕâÔÚspringÀïÃ涼ºÜºÃµÄÌṩ.ËäÈ»ÔÚ¿çÈÝÆ÷µÄÊÂÎñ¹ÜÀí£¬springÀïÃ沢ûÓÐÌṩ£¬µ«ÊǶÔÓÚÒ»°ãµÄweb³ÌÐòÀ´Ëµ£¬Ò²²»ÐèÒª½ö½öΪÁËÄÇЩ¹¦Äܶø²»µÃ²»Ê¹ÓÃejb¡£²»¹ý£¬×î½üjbossµÄǶÈëʽµÄejbÈÝÆ÷Ò²¿ÉÒÔ×öµÄ¸üСÁË£¬Ò²ÊÇ¿ªÔ´ÖеÄÑ¡ÔñÖ®Ò».ÎÞÂÛ¼¼ÊõÊÇÔõÑù·¢Õ¹µÄ£¬µ±Ç°£¬ÎÒÃÇÏÈÀ´Ñо¿ÆäÖÐAOPʵÏֵķ½·¨¡£

¡¡¡¡ÊÂʵÉÏ£¬SpringÖеÄÊÂÎñ´¦ÀíÊÇͨ¹ýAOP˼ÏëÀ´ÊµÏֵģ¬Spring AOPÓëAspect JºÍJBoss¾ßÓкܴóµÄ²»Í¬£¬Ê×ÏÈ£¬Ê¹ÓÃSpring AOP¿ò¼ÜµÄÓû§Òª¼ÇסµÄÒ»µãÊÇ£¬Spring AOPÕë¶ÔµÄÊÇ·½·¨²ã´ÎÉϵÄʵÏÖ£¬¶øÆäËûÁ½Õ߶Ô×Ö¶ÎÒ²ÌṩÁËÖ§³Ö.˵µ½Spring AOPµÄÄÚÄ»£¬ÆäʵҲ²»ÄÑ£¬¶ÔÓÚÓнӿڵÄÀ࣬ʹÓõÄÊÇJavaÄÚ²¿ÀàÌṩµÄProxy;¶ø¶ÔÓÚÄÇЩ²»ÊµÏÖ½Ó¿ÚµÄÀ࣬ʹÓõÄÊÇcglib¿â£¬¶¯Ì¬´´½¨Ò»¸ö×ÓÀàÀ´ÊµÏÖ.

¡¡¡¡ ÔÚSpring AOPÖÐÌṩÁË4ÖÖ´¦ÀíÇÐÈëÀàÐÍ:around£¬before£¬after£¬introduction.

¡¡¡¡1)aroundÊÇÕë¶Ô¾ßÌåµÄij¸öÇÐÈëµãµÄ·½·¨(±ÈÈ磬ÏÖÔÚÓиöOrderBook·½·¨£¬aroundµÄÇÐÈëÀàÐÍÊǾÍÕâ¸ö·½·¨µÄÄÚ²¿µ÷Óã¬ÊÇͨ¹ýjavaµÄÔªÊý¾Ý£¬ÔÚÔËÐÐʱͨ¹ýMethod.invokeÀ´µ÷Ó㬾ßÓзµ»ØÖµ£¬µ±·¢ÉúÒâÍâµÄʱºò»áÖÕÖ¹.¼ÇסµÄÒ»µãÊÇ£¬·µ»ØÖµ.);

¡¡¡¡2)beforeÊÇÔÚ·½·¨µ÷ÓÃÇ°µ÷ÓÃ(ÔÚOrderBook·½·¨Ç°µ÷Ó㬵«ÊÇûÓзµ»ØÖµ£¬Í¬Ê±ÔÚͨ³£ÒâÍâÇé¿öÏ£¬»á¼ÌÐøÔËÐÐÏÂÒ»²½·½·¨.¼ÇסµÄÒ»µãÊÇûÓзµ»ØÖµ);

¡¡¡¡3)afterºÍbefore¸ÕºÃÏà·´£¬Ã»ÓÐʲôÌرðµÄµØ·½.

¡¡¡¡4)introductionÊÇÒ»¸ö¸ü¼ÓÌØÊâµÄ£¬µ«¹¦Äܸü¼ÓÇ¿´óµÄÇÐÈëÀàÐÍ.±ÈÈç(ÄãÏÖÔÚÓÐBook¶ÔÏó£¬Computer¶ÔÏ󣬻¹Óм¸Ê®¸öÕâÖÖÒµÎñ¶ÔÏó£¬ÏÖÔÚÄãÏ£ÍûÔÚÿ¸öÕâÑùµÄ¶ÔÏóÖж¼¼ÓÈëÒ»¸ö¼Ç¼×îºóÐ޸ĵÄʱ¼ä.µ«ÊÇÄãÓÖ²»Ï£Íû¶Ôÿ¸öÀ඼½øÐÐÐ޸ģ¬ÒòΪ̫Âé·³ÁË£¬Í¬Ê±¸üÖØÒªµÄÒ»µã£¬ÆÆ»µÁ˶ÔÏóµÄÍêÕûÐÔ£¬Ëµ²»¶¨ÄãÒÔºóÓÖ²»ÐèÒªÕâ¸öʱ¼äÊý¾ÝÁËÄØ...ÕâʱÔõô°ìÄØ?Spring AOP¾ÍΪÄãרÃÅʵÏÖÕâÖÖ˼ÏëÌṩÁËÒ»¸öÇÐÈë´¦Àí£¬ÄǾÍÊÇintroduction.introduction¿ÉÒÔΪÄ㶯̬¼ÓÈëijЩ·½·¨£¬ÕâÑù¿ÉÒÔÔÚÔËÐÐʱ£¬Ç¿ÖÆת»»ÕâЩ¶ÔÏ󣬽øÐвåÈëʱ¼äÊý¾ÝµÄ¶¯×÷£¬¸üÉîµÄÄÚÄ»¾ÍÊÇC++Ð麯ÊýÖеÄvtable˼Ïë).²»¹ýÕâÖÖ¶¯Ì¬ÊÇÒÔÐÔÄÜ×÷Ϊ´ú¼ÛµÄ£¬Ê¹ÓÃ֮ǰҪÉ÷ÖØ¿¼ÂÇ£¬ÕâÀïÎÒÃÇ̸µÄÊǼ¼Êõ£¬ËùÒÔ¾ÍÈÏΪËûÊDZØÐèµÄ¡ £

¡¡¡¡ºÃ£¬ÏÖÔÚÎÒÃǾÍÄõÚËÄÖÖÀ´½øÐоÙÀý˵Ã÷Spring AOPµÄÇ¿´óÖ®´¦:

¡¡¡¡1)¼ÙÉè´´½¨ÁËÒ»¸öBookService½Ó¿Ú¼°ÆäʵÏÖ·½·¨(Äã×Ô¼ºµÄÒµÎñ¶ÔÏó):

<table borderColor=#cccccc width="90%" align=center bgColor=#e7e9e9 border=1> <tr> <td>//?$ID:BookService.java Created:2005-11-6 by Kerluse Benn
package com.osiris.springaop;

public interface BookService {
¡¡public String OrderComputerMagazine(String userName£¬String bookName);
¡¡public String OrderBook(String userName£¬String bookName);
}

//?$ID:BookServiceImpl.java Created:2005-11-6 by Kerluse Benn
package com.osiris.springaop;

public class BookServiceImpl implements BookService{
¡¡public String OrderBook(String name£¬String bookName) {
¡¡¡¡// TODO Add your codes here
¡¡¡¡String result=null;
¡¡¡¡result="¶©¹º"+bookName+"³É¹¦";
¡¡¡¡return result;
¡¡}

¡¡public String OrderComputerMagazine(String userName£¬ String bookName) {
¡¡¡¡// TODO Add your codes here
¡¡¡¡String result=null;
¡¡¡¡result="¶©¹º"+bookName+"³É¹¦";
¡¡¡¡return result;
¡¡}
}</td></tr></table>
¡¡¡¡2) ÊÂʵÉÏÄ㻹ÓкܶàÕâÑùµÄ¶ÔÏó£¬ÏÖÔÚÎÒÃÇÏ£ÍûÔÚÿ¸ö¶ÔÏóÖÐÌí¼ÓÎÒÃǵŦÄÜ×îºóÐ޸ĵÄʱ¼ä£¬¹¦ÄÜÈçÏÂ:

<table borderColor=#cccccc width="90%" align=center bgColor=#e7e9e9 border=1> <tr> <td>//?$ID:IAuditable.java Created:2005-11-7 by Kerluse Benn
package com.osiris.springaop.advices.intruduction;

import java.util.Date;

public interface IAuditable {
¡¡void setLastModifiedDate(Date date);
¡¡Date getLastModifiedDate();
}</td></tr></table>
¡¡¡¡3) ÒòΪÎÒÃÇʹÓõÄÇÐÈëÀàÐÍÊÇintroduction£¬Spring AOPΪÎÒÃÇÌṩÁËÒ»¸öÃèÊöÕâÖÖÀàÐ͵ĽӿÚIntroductionInterceptor£¬ËùÒÔÎÒÃǵÄÇÐÈëʵÏÖ´¦Àí£¬Ò²ÐèҪʵÏÖÕâ¸ö½Ó¿Ú:

<table borderColor=#cccccc width="90%" align=center bgColor=#e7e9e9 border=1> <tr> <td>//?$ID:AuditableMixin.java Created:2005-11-7 by Kerluse Benn
package com.osiris.springaop.advices.intruduction;
import java.util.Date;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.IntroductionInterceptor;

public class AuditableMixin implements IAuditable£¬IntroductionInterceptor{
¡¡private Date lastModifiedDate;

¡¡public Object invoke(MethodInvocation m) throws Throwable {
¡¡¡¡// TODO Add your codes here
¡¡¡¡if(implementsInterface(m.getMethod().getDeclaringClass())){
¡¡¡¡¡¡return m.getMethod().invoke(this£¬m.getArguments());
¡¡¡¡¡¡//invoke introduced mthod£¬here is IAuditable
¡¡¡¡}else{
¡¡¡¡¡¡return m.proceed(); //delegate other method
¡¡¡¡}
¡¡}
¡¡public Date getLastModifiedDate() {
¡¡¡¡// TODO Add your codes here
¡¡¡¡return lastModifiedDate;
¡¡}

¡¡public void setLastModifiedDate(Date date) {
¡¡¡¡// TODO Add your codes here
¡¡¡¡lastModifiedDate=date;
¡¡}

¡¡public boolean implementsInterface(Class cls) {
¡¡¡¡// TODO Add your codes here
¡¡¡¡return cls.isAssignableFrom(IAuditable.class);
¡¡}
}</td></tr></table>
¡¡¡¡Êä³ö½á¹û:

¡¡¡¡¶©¹ºProfessional C#³É¹¦ ¶©¹ºÊ±¼äΪMon Nov 07 11:35:20 CST 2005
¡¡¡¡¶©¹ºExpert j2ee one-on-one³É¹¦ ¶©¹ºÊ±¼äΪMon Nov 07 11:35:30 CST 2005


¡¡¡¡¿´¼ûÉÏÃæºÚÌå×Ö:

IAuditable auditable=(IAuditable)bookService;

¡¡¡¡ÓÉÓÚbookService¶ÔÏóÊÂʵÉÏÒѾ­ÊµÏÖÁËIAuditable½Ó¿Ú£¬Í¨¹ýSpring AOPµÄintroductionÇÐÈëʵÏÖ£¬ËùÒÔÔÚÔËÐÐʱ(ÊìϤC++µÄvtableÄ£Ð͵ĿÉÒÔÔÚ´óÄÔÀïÏëÒ»ÏÂ)¿ÉÒÔת»»£¬ÎÒÃǾͿÉÒÔËæÒâÌí¼Ó×Ô¼ºµÄ½Ó¿Ú·½·¨ÁË¡£

¡¡¡¡ºÃÁË£¬¹ØÓÚSpring AOP¾Í½éÉܵ½ÕâÁË£¬ÆäËûÏà¹ØµÄÄÚÈÝ¿ÉÒԲο¼ÏàÓ¦µÄÊé¼®£¬ÕâƪÎÄÕµÄÄ¿µÄÖ÷ÒªÊÇΪÁ˽éÉÜÒ»ÏÂAOP˼ÏëÓ¦ÓõÄÇ¿´óÖ®´¦.¾ßÌåµÄÏà¹ØÓ¦Óû¹°üÀ¨Óû§²Ù×÷ÑéÖ¤µÈµÈ¡£

¡ü·µ»ØĿ¼
ǰһƪ: ×ß³öabstract classÓëinterfaceµÄÀ§»ó
ºóһƪ: È«ÃæÈÏʶJUnit 4µÄÐÂÌØÕ÷