µ±Ç°Ò³Ãæ: ¿ª·¢×ÊÁÏÊ×Ò³ ¡ú 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µÄÐÂÌØÕ÷