ºìÁªLinuxÃÅ»§
Linux°ïÖú

JavaÅú×¢µÄ·¢Ã÷ÆðÒò¼°´úÂëÓ¦ÓÃʵÀý

·¢²¼Ê±¼ä:2006-06-23 10:21:26À´Ô´:ºìÁª×÷Õß:koov
¡¡¡¡Åú×¢Äܹ»Ïû³ýÑù°å´úÂ룬ÈÃÔ´´úÂëµÄ¿É¶ÁÐÔ¸ü¸ß£¬²¢ÄÜÌṩ¼¶±ð¸ü¸ßµÄ´íÎó¼ì²é¡£´ÓEJB3µ½JUnit4£¬ÄÄÀﶼÔÚʹÓÃËü¡£±¾Îľͽ«¸æËßÄãÈçºÎʹÓÃËü¡£

¡¡¡¡Java 5ÏòJavaÒýÈëÁËÅú×¢(Annotations)£¬ËüµÄʹÓÃѸËÙ³ÉΪÏÖ´úJava¿ª·¢Öв»¿ÉȱÉÙµÄÒ»²¿·Ö¡£ÔÚÕýʽ¿ªÊ¼½éÉÜËü֮ǰ£¬¿´¿´ÎªÊ²Ã´Òª·¢Ã÷Åú×¢£¬ÕâÊǷdz£ÖµµÃµÄ¡£

¡¡¡¡×Ô´ÓJavaµ®ÉúÖ®ÈÕÆð£¬ÈËÃǾÍÒ»Ö±ÔÚ½â¾öËü³õÆÚºöÊÓÁ˵ÄһЩÎÊÌ⣺ȱÉÙÔªÊý¾Ý£»È±·¦½«JavaÒÔÍâµÄ´úÂëǶÈëµ½JavaÔ´´úÂëÎļþÀïµÄÄÜÁ¦µÈ¡£µ±JavaÃæÊеÄʱºò£¬Õë¶ÔÕâЩÎÊÌâ¶øÍƳöµÄJavaDocÖÕÓÚÈÃËü±äÍêÕûÁË¡£JavaDocʹÓÃÁËÔÚ´úÂëÀïרÃűê¼Ç×¢Ê͵ĸÅÄ´Ó¶øÈÃËüÄܹ»ÌáÈ¡³ö¶îÍâµÄÐÅÏ¢£¬Ëµ¾ßÌåµã¾ÍÊÇÎĵµ£¬²¢½«Ëüת»»³ÉΪÎÒÃÇÊìϤµÄJavaDocÎĵµ¡£ÕâÊÇÒ»Ïî¼òµ¥µÄ¼¼Êõ£¬ÈËÈ˶¼¿ÉÒÔʹÓá£Ê×ÏÈ»áÓÐDoclet£¬Ä¿µÄÊÇÈÃÈËÃÇÀ©Õ¹ÎĵµµÄÊä³ö¡£È»ºóÊÇXdoclet£¬ËüÏñʹÓñê¼ÇÒ»ÑùʹÓÃJavaDocÀ´Éú³É´úÂ룬´Ó¶ø½«Õû¸ö¹ý³Ì±äµÃÇá¶øÒ×¾Ù¡£Õⲿ·ÖÊǶÔJ2EEµÄ¸´ÔÓÐԵĻØÓ¦¡£J2EEÔ­À´ÒÀ¿¿ºÜ¶àÑù°å´úÂë(boilerplate code)°Ñ¶ÔÏóÀ¦°óµ½J2EE¿ò¼ÜÀï¡£µ«ÊÇÕâЩ·½°¸¶¼ÓÐһЩÎÊÌâ¡£Ê×ÏÈ£¬×¢ÊÍÀïµÄ±ê¼Ç´ÓÀ´¶¼²»»á½øÈë×îÖÕµÄÔ´´úÂ룬ËùÒÔ³ý·ÇÄãÉú³É´úÂëÀ´·´Ó³ÕâЩ±ê¼Ç£¬·ñÔòÄãÎÞ·¨ÔÚÔËÐÐÆÚ¼ä²éÕÒµ½Ëü¡£Æä´Î£¬Ëü»á°ÑÕû¸öÔ¤´¦Àí²ã¼Óµ½(ÔÚÀíÏëÇé¿öÏÂÓ¦¸ÃÊÇ)Ò»¸ö¼òµ¥±àÒë¹ý³ÌÀï¡£×îºó£¬»ùÓÚ×¢Ê͵ıê¼ÇÔÚ±àÒëÆڼ䲢²»ÊǺÜÈÝÒ×¼ì²é£¬Ò²ÎÞ·¨ÇáÒ×±»ºÜ¶àIDE¼ì²é£»Èç¹ûÄã°Ñ×¢Êͱê¼Çƴд´íÁË£¬±àÒëÆ÷ÊDz»»á×¢Òâµ½µÄ£¬±àÒëÆ÷Ö»»á¹Ø×¢ÄÇЩËüÖªµÀÈ·ÇÐÃû×ֵıê¼Ç¡£

¡¡¡¡Òª½â¾öÕâËùÓеÄÎÊÌ⣬JavaÐÂÔöÁËÅú×¢¡£Åú×¢ÊÇÓÃÓÚJavaÓïÑԵı¾»úÔªÊý¾Ý±ê¼Ç¡£ËüÃǵÄÊäÈëÑϸñÓëJavaÓïÑÔµÄÆäËû²¿·ÖÀàËÆ£¬¿ÉÒÔͨ¹ý·´Ó³±»·¢ÏÖ£¬¸üÈÝÒ×µØÈÃIDEºÍ±àÒëÆ÷µÄ±àдÕß¹ÜÀí¡£ÏÖÔÚ¾ÍÈÃÎÒÃÇ¿´Ò»Ð©±»Åú×¢µÄ´úÂë°É£»ÎÒÃÇÏÈ´ÓBaseExample¿ªÊ¼£¬ËüÊÇÒ»¸ö¼òµ¥Àֻ࣬´øÓÐÒ»¸ö·½·¨----myMethod£º

¡¡¡¡public class BaseExample {

¡¡¡¡public BaseExample() {}

¡¡¡¡public void myMethod() {

¡¡¡¡System.out.println("This is the BaseExample");

¡¡¡¡}

¡¡¡¡}

¡¡¡¡ÏÖÔÚ£¬ÎÒÃÇÏëÒªÀ©Õ¹BaseExample²¢Ìæ´úmyMethod¡£ÏÂÃæ¾ÍÊÇÍê³ÉÕâÒ»ÈÎÎñµÄExample1´úÂ룺

¡¡¡¡public class Example1 extends BaseExample {

¡¡¡¡public Example1() {}

¡¡¡¡@Overridepublic void myMethod() {

¡¡¡¡System.out.println("This is the Example1");

¡¡¡¡}

¡¡¡¡}

¡¡¡¡ÕâÑùÎÒÃǾÍÓÐÁ˵ÚÒ»¸ö¹ØÓÚmyMethodµÄÅú×¢----@Override¡£ÕâÊÇһϵÁÐÄÚÖõÄÅú×¢Ö®Ò»¡£@OverrideµÄÒâ˼ÊÇ¡°·½·¨±ØÐëÌæ´úÆ䳬ÀàÖеÄÒ»¸ö·½·¨£»Èç¹û×ö²»µ½ÕâÒ»µã£¬ÄÇô¾Í»áÓж«Î÷³ö´í£¬Ê¹µÃ±àÒëÆ÷²úÉú´íÎ󡱡£Ã»ÓÐ@Override£¬´úÂëÕÕÑù»áÕý³£¹¤×÷£¬µ«ÊǼÙÉèÓÐÈËÐÞ¸ÄBaseExample£¬ÈÃmyMethod´øÓвÎÊý¡£Èç¹ûÄãûÓÐʹÓÃ@OverrideÅú×¢£¬´úÂëÈÔÈ»»á±»±àÒ룬Òþ²ØÁË×ÓÀàûÓÐÌæ´ú³¬Àà·½·¨µÄÎÊÌâ¡£Èç¹ûÓÐ@OverrideµÄ»°£¬Äã»áÔÚ±àÒëÆڼ俴µ½·¢Éú´íÎó¡£

¡¡¡¡Äã¿ÉÄÜ»áÈÏΪ¡°ÄѵÀÓïÑÔµÄÀ©Õ¹Ã»Óнâ¾öÕâ¸öÎÊÌ⣬¶îÍâµÄ¹Ø¼ü×Ö¿ÉÄÜ»áÂ𡱣¬Êǵģ¬Ëü¿ÉÄÜÒѾ­ÊµÏÖÁËÕâÒ»µã£¬µ«ÊÇÕâ²»½öûÓиøÓïÑÔ´øÀ´ÈκÎÁé»îÐÔ£¬»¹»áµ¼ÖºܶàÔ´´úÂë¼æÈÝÐÔµÄÎÊÌâ¡£Åú×¢ÕâÖÖ·½Ê½±ÜÃâÁ˸ıäJavaÓïÑÔ±¾Éí(µ±È»³ýÁËÔö¼ÓÁË@markup)£¬²¢ÇÒ»¹Äܹ»·ÅÔÚ´úÂëµÄ²»Í¬²¿·ÖÀ¶ø²»½ö½öÊÇÔÚ±ê¼Ç·½·¨Àï¡£

¡¡¡¡¹ØÓÚÅú×¢»¹ÓÐÒ»µãÊÇ£¬Äã¿ÉÒÔ´´½¨×Ô¼ºµÄÅú×¢±ê¼Ç£¬ÕâÕýÊÇÎÒÃÇÂíÉÏÒªÌÖÂÛµÄÄÚÈÝ¡£ÏëÒ»ÏëÏÂÃæÕâ¸öÎÊÌ⣺ÎÒÃÇÓÐһЩ¼òµ¥µÄJava Beans³ÌÐò£¬ËüÃǶ¼´øÓв»Í¬µÄ×Ö·û´®×ֶΡ£ÎÒÃÇÏ£ÍûÄܹ»ÓÐһЩͨÓô°ÌåÏÔʾ´úÂ룬ËüÃÇÄܹ»ÓÃÆäËûÏÔʾÌáʾ(±ÈÈç¿í¶È)À´ÕýÈ·µØ±êʾÕâЩ×ֶΡ£ÏÖÔÚÎÒÃÇ¿ÉÒÔ±àдһ¸ö³¬À࣬ËüÄܹ»ÌáÈ¡³öÕâ¸öÊý¾Ý£¬±ÈÈç˵´ÓÒ»¸öÔÚÿ¸öÀàÀﶼ´øÓÐһЩ¾²Ì¬Ö§³Ö·½·¨µÄ¾²Ì¬Êý×éÀµ«ÊÇÕâÒ²Òâζ×ÅҪǿÖƸø´úÂë·Ö²ã¡£ÀûÓÃÅú×¢×öµ½ÕâÒ»µã¾ÍÒª¼òµ¥µÃ¶àÁË¡£ÏÖÔÚÈÃÎÒÃÇ´Ó¶¨ÒåFormLabel.javaÀïµÄFormLabelµÄÅú×¢¿ªÊ¼£º

¡¡¡¡import java.lang.annotation.*;

¡¡¡¡@Retention(RetentionPolicy.RUNTIME)

¡¡¡¡@Target(ElementType.METHOD)

¡¡¡¡public@interface FormLabel {String label();

¡¡¡¡int width() default 40;

¡¡¡¡}

¡¡¡¡ÄãÓ¦¸Ã×¢Òâµ½µÄµÚÒ»¼þÊÂÊÇJavaʹÓÃÁËËü×Ô¼ºÄÚÖõÄһЩÅú×¢À´¶¨Åú×¢£º@RetentionºÍ@Target¡£@RetentionÓÃÀ´¶¨Òåͨ¹ýÉèÖÃRetentionPolicyµÄÖµÅú×¢Äܹ»ÔÚ¹¹½¨-ÔËÐйý³ÌÖдæÁô¶à¾Ã¡£ÕâÀïÎÒÃÇʹÓÃÁËRUNTIME£¬ÕâÒâζ×ÅÎÒÃǶ¨ÒåµÄÅú×¢½«»áÔÚÔËÐÐÆڼ䱻±£ÁôÔÚ´úÂëÀï¡£RetentionPolicy.SOURCE½«±»ÓÃÓÚÒ»¸öÎÒÃÇÏ£Íû±»±àÒëÆ÷ʹÓÃÈ»ºóÅ×ÆúµÄÅú×¢¡£RetentionPolicy.CLASSÈÃËüÃDZ£ÁôÔÚÉú³ÉµÄÀàÎļþÀµ«ÊÇÄܹ»ÔÚÔËÐÐÆڼ䱻JavaÐéÄâ»ú(JVM)·ÃÎʵ½¡£

¡¡¡¡ÔÚĬÈÏÇé¿öÏ£¬Äã¿ÉÒÔÔÚ´úÂëÀïµÄÈκεط½¶¼Ó¦ÓÃÅú×¢¡£@TargetÅú×¢ÈÃÄãÄܹ»½«ËüÏÞÖÆÔÚ´úÂëµÄÌض¨²¿·ÖÀï¡£ÔÚ±¾ÎÄÀÎÒÃÇ°ÑÄ¿±êÃé×¼ÁËElementType.METHOD£¬ÕâÒâζ×ÅËüÖ»Äܹ»Óë·½·¨¹ØÁªÔÚÒ»Æð¡£ÆäËûElementTypesÓÐCONSTRUCTOR¡¢FIELD¡¢LOCAL_VARIABLE¡¢PACKAGE¡¢PARAMETERºÍTYPE£¬Ã¿¸ö¶¼Äܹ»°ÑÅú×¢ÏÞÖƵ½¸ÃÖÖÀàÐ͵ÄJavaÓïÑÔÔªËØ£¬ËùÒÔÀýÈ磬ÉèÖÃTYPE½«Ö»ÔÊÐíÅúעΪ¶¨Òå¹ýµÄÕâÖÖÀàÐÍ£¬±ÈÈ磺

¡¡¡¡@OurAnnotation

¡¡¡¡public class OurAnnotatedClass {¡­

¡¡¡¡ÖµµÃ×¢ÒâµÄÊÇ£¬@TargetÅú×¢Äܹ»½ÓÊܵ¥¸öElementType»òÕßÒ»¸öElementTypeÊý×飬Èç¹ûÄãÏëÒª½«Åú×¢ÏÞÖÆΪһϵÁÐÓïÑÔÔªËصĻ°¡£
¡¡¡¡ÏÂÃæÒ»²¿·ÖÊÇÅú×¢½Ó¿ÚµÄ¶¨Ò壻Õâ¾ÍÏñÊÇÒ»¸öÆÕͨµÄ½Ó¿ÚÉùÃ÷£¬³ýÁËÎÒÃÇÓÃ@interface½«Æä±ê¼ÇΪһ¸öÅú×¢¡£ÔÚÕâ¸ö½Ó¿ÚÀÎÒÃÇÈ»ºó¶¨ÒåÅú×¢µÄ·½·¨£¬¾ÍÏñÎÒÃÇÏ£ÍûÓÃÔÚÓëÅú×¢Ïà¹ØÁªµÄÐÅÏ¢ÉϵijéÏó·½·¨£¬ËùÒÔÎÒÃǾÍÓÐÁËString label()£¬ÓÃÓÚÒ»¸ö½Ð×ölabelµÄ×Ö·û´®ÊôÐÔ¡£Èç¹ûÎÒÃÇûÓз½·¨£¬ÄÇôÅú×¢¾ÍÖ»ÄÜÓÃÓÚ¡°×ö±ê¼Ç¡±£¬¶ø@Overrides×¢Ê;ÍÊÇÕâÑùÒ»¸öÀý×Ó¡£Èç¹ûÄãÖ»ÓÐÒ»¸öÊôÐÔ£¬Ëü×îºÃ±»ÃüÃûΪ¡°value¡±£¬ÒòΪµ±´øÓÐÒ»¸öδÃüÃû²ÎÊýµÄÅú×¢ÔÚÉèÖÃÕâ¸öֵʱ£¬Ëü¹¤×÷µÃ×îºÃ¡£ÊôÐÔ»¹¿ÉÒÔÓÐĬÈÏÖµ£¬±ÈÈç¡°int width() de






fault 40;¡±¾ÍÊÇÔÚ¶¨ÒåÒ»¸öĬÈÏֵΪ40µÄÕûÊýÊôÐÔ¡£

¡¡¡¡Õâ¾ÍÊÇÅú×¢¶¨Òå¡£ÎÒÃÇÏÖÔھͿÉÒÔÔÚ´úÂëÀïʹÓÃËüÁË¡£ÏÂÃæÒ»¸öSimpleDataÀà¾ÍÓõ½ÁËËü¡£

¡¡¡¡public class SimpleData {

¡¡¡¡private String firstname;

¡¡¡¡private String lastname;

¡¡¡¡private String postcode;

¡¡¡¡public SimpleData() {}

¡¡¡¡@FormLabel(label="First Name")

¡¡¡¡public String getFirstname() { return firstname; }

¡¡¡¡public void

¡¡¡¡setFirstname(String firstname) {this.firstname = firstname;}

¡¡¡¡@FormLabel(label="Last Name",width=80)

¡¡¡¡public String getLastname() { return lastname; }

¡¡¡¡public void setLastname(String lastname) {

¡¡¡¡this.lastname = lastname;

¡¡¡¡}

¡¡¡¡@FormLabel(label="Postal code",width=10)

¡¡¡¡public String getPostcode() { return postcode; }

¡¡¡¡public void setPostcode(String postcode) {

¡¡¡¡this.postcode = postcode;

¡¡¡¡}

¡¡¡¡}

¡¡¡¡µ±È»£¬Èç¹ûÎÒÃDz»²éÕÒÅú×¢£¬ÄÇôËüÃǶԴúÂëµÄÖ´ÐоͲ»»áÔì³ÉÈκβ»Í¬¡£ÎÒÃÇËùÐèÒªµÄÊÇÔÚÔËÐÐÆÚ¼äʹÓÃÅú×¢µÄ·½Ê½£»ÎÒÃÇͨ¹ýReflection APIÀ´´ïµ½ÕâһĿµÄ¡£ÏÖÔÚ¾ÍÈÃÎÒÃÇ´´½¨Ò»¸ö¼òµ¥µÄprocessForm·½·¨£¬ËüÄܹ»ÔÚÈκζÔÏóÀï²éÕÒÅú×¢¡£

¡¡¡¡public void processForm(Object o) {

¡¡¡¡for(Method m:o.getClass().getMethods()) {

¡¡¡¡ÎÒÃǽ«ÔÚ´«µÝ¸ø·½·¨µÄ¶ÔÏóµÄÀàÀﶨÒåËùÓеķ½·¨¡£ÏÖÔÚ£¬ÎÒÃÇÐèÒª¼ì²éÿ¸ö·½·¨£¬¿´¿´ËüÃÇÊÇ·ñÓÐFormLabelÅú×¢£¬ÒÔ¼°ÊÇ·ñ·µ»ØÒ»¸öString(ΪÁ˼òµ¥µØ˵Ã÷ÎÊÌ⣬ÎÒÃǸøËùÓеĽá¹û¶à·µ»ØһЩ´úÂë)£º

¡¡¡¡if(m.isAnnotationPresent(FormLabel.class) &&

¡¡¡¡m.getReturnType()==String.class) {

¡¡¡¡ÏÖÔÚÎÒÃÇ¿ÉÒÔͨ¹ýʹÓÃMethodµÄgetAnnotation()·½·¨À´ÌáÈ¡FormLabelÅú×¢£º

¡¡¡¡FormLabel formLabel=

¡¡¡¡m.getAnnotation(FormLabel.class);

¡¡¡¡ÏÖÔÚÎÒÃÇÖ´Ðз½·¨À´È¡µÃÆä×Ö·û´®Öµ£¬²¢Í¨¹ýÔÚÅú×¢½Ó¿ÚÀﶨÒåµÄ·½·¨·ÃÎÊÅú×¢ÊôÐÔ¡£ÏÂÃæÎÒÃǾͰÑËüÃÇ´òÓ¡³öÀ´£º

¡¡¡¡try {

¡¡¡¡String value=(String)m.invoke(o);

¡¡¡¡String label=formLabel.label();

¡¡¡¡int width=formLabel.width();

¡¡¡¡System.out.printf("%s[%d]:%s\n",label,width,value);

¡¡¡¡} catch (IllegalArgumentException ex) {

¡¡¡¡ex.printStackTrace();

¡¡¡¡}

¡¡¡¡catch (IllegalAccessException ex) {

¡¡¡¡ex.printStackTrace();}

¡¡¡¡catch (InvocationTargetException ex) {

¡¡¡¡ex.printStackTrace();

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡}

¡¡¡¡ÏÖÔÚÎÒÃÇ¿ÉÒÔ´´½¨º¬ÓÐ@FormLabelÅú×¢µÄÐÂÀ࣬²¢°ÑËüÃÇ´«µÝ¸øprocessForm·½·¨¡£ÕâÊÇÔÚÔËÐÐÆÚ¼ä·ÃÎÊÄã×Ô¼ºµÄÅú×¢µÄ»ù´¡¡£

¡¡¡¡ÏÖÔÚÕâ¸öʱºò£¬ÎÒÃÇ»ØÍ·¿´¿´Java 5ÀïÃæÆäËû¹ØÓÚÅú×¢µÄÄÚÈÝ¡£Ê×ÏÈÊDZàÒëÆ÷Ö¸Áî----@DeprecatedºÍ@SuppressWarnings¡£@DeprecatedÊÇ°Ñ·½·¨±êʾΪ±»·ñ¶¨µÄÔöÇ¿·½·¨£»²»ÍƼö°ÑËüÓÃÔÚдúÂëÀÒÔ·ÀÖ¹ÒÔºóɾ³ý¡£ÓÃ@Deprecated¿ÉÒÔÉú³ÉÒ»¸öÀ´×Ô±àÒëÆ÷µÄÏà¹Ø¾¯¸æ¡£

¡¡¡¡@SuppressWarnings»á×èÖ¹±àÒëÆ÷ÔÚ·â±Õ´úÂëÔªËØÀᆵ¸æÄ㣬ËùÒÔÄã¿ÉÒÔÔÚÀඨÒåµÄ¿ªÊ¼»òÕ߶ÔÌض¨µÄ·½·¨Ê¹ÓÃ@SuppressWarnings¡£Ëü¿ÉÒÔ´ø²ÎÊý£¬ÓÃÀ´Ö¸¶¨ÐèҪȡÏûµÄ´íÎóµÄÀàÐÍ£¬ÀýÈ磺

¡¡¡¡@SuppressWarnings("unchecked")

¡¡¡¡public List getList() {

¡¡¡¡List l=new LinkedList();

¡¡¡¡return l;

¡¡¡¡}

¡¡¡¡ÕâÀïÎÒÃÇÈ¡ÏûÁËÒ»¸ö¹ØÓÚÔÚListºÍListÖ®¼äµÄ¡°Î´¼ì²é¡±µÄÇ¿ÖÆת»»¡£µ±Ä㿪ʼÓÃJava±à³Ìµ«ÊÇûÓзÇÒ»°ã´úÂëµÄʱºò£¬Õâ¾Í·Ç³£ÓÐÓá£ÔÚÈ¡Ïû¾¯¸æµÄʱºò£¬¾¡¿ÉÄܵØËõСȡÏûµÄ·¶Î§ÊÇÖµµÃµÄ£»ÔÚÉÏÃæµÄÀý×ÓÀÎÒÃÇÈ¡ÏûÁËÕû¸ö´úÂë¡£ÎÒÃÇ¿ÉÒÔ°ÑËü±ä½ô´Õ£¬Ö»Òþ²ØÒ»¸öÓï¾äµÄ´íÎó£º

¡¡¡¡public List

¡¡¡¡getListToo() {

¡¡¡¡@SuppressWarnings("unchecked")

¡¡¡¡List l=new LinkedList();

¡¡¡¡return l;

¡¡¡¡}

¡¡¡¡Òª×¢ÒâµÄÊÇ£¬ÄãÐèÒªÔÚJava2SE 1.5.06»òÕßÒÔÉϵİ汾ÉϽøÐÐÕâÏ×÷£»Õâ֮ǰµÄ°æ±¾Ã»ÓÐÌṩ¶Ô@SuppressWarningÖ§³Ö¡£

¡¡¡¡Java 5ÀïÆäËûÄÚÖõÄÅú×¢¶¼Óë¶ÔÅú×¢µÄÖ§³ÖÓйØ----@DocumentedºÍ@Inherited¡£ËüÃǶ¼¿ÉÒÔ±»¼Óµ½Åú×¢¶¨ÒåÀï¡£@DocumentedµÄ×÷ÓÃÊÇ£¬Åú×¢µÄʹÓÃÓ¦¸ÃÔÚËùÓÐÉú³ÉµÄJavaDocÎĵµÀﶼ·´Ó³³öÀ´¡£ÕýÈçÄã¿ÉÄÜ¿´µ½µÄ£¬Åú×¢ºÍJavaDoc±ê¼ÇÊÇ»¥²¹µÄ¡£@InheritedµÄÒâ˼ÊÇ£¬µ±ÁíÍâÒ»¸öÀàÓÃÀàÀ´À©Õ¹Åúעʱ£¬Åú×¢Ó¦¸ÃÊǿɼ̳еģ»ÔÚĬÈÏÇé¿öÏ£¬Åú×¢ÊDz»Äܱ»¼Ì³ÐµÄ¡£

¡¡¡¡Äã¿ÉÄܺÜÏ£ÍûÔÚ×Ô¼ºµÄ¿ª·¢ÏîÄ¿ÀïʹÓÃJavaÅú×¢µÄ·½·¨¡£¾ÍÏñÎÒÔÚÒýÑÔÀï½²µ½µÄ£¬Åú×¢ÒѾ­³ÉΪÏÖ´úJava¿ò¼ÜºÍÓ¦ÓóÌÐòµÄÖØÒªÒ»²¿·Ö£»¾ÍÄÃJUnit4¾Ù¸öÀý×Ó£¬JavaÅú×¢ÒѾ­ÔÊÐíJUnitµÄ¿ª·¢ÈËÔ±ÓÐÁËÒÔ¸ü·á¸»µÄ·½Ê½±íʾ²âÊԵķ½·¨£¬¶ø²»ÓÃÒªÇó²âÊÔ±àдÕßÇ¿ÖÆʹÓÃͳһµÄÃüÃû¹æÔò¡£»¹ÓÐGrails£¬ÕâÀïÅú×¢¿ÉÒÔ±»ÓÃÀ´Ïò¡°ÀàËÆÌú¹ì(rails-like)¡±µÄ¿ò¼ÜÌṩÐÅÏ¢¡£Åú×¢µÄÄÜÁ¦Óкܶ࣬µ«ÊÇÒª¼Çס£¬ÄÜÁ¦Ô½´ó£¬ÔðÈÎÒ²Ô½´ó¡£Åú×¢ÊÇΪÁ˸ø¿ª·¢ÈËÔ±Ìṩ±ê¼ÇÐÅÏ¢£¬¶ø²»ÊÇÓÃÀ´Òþ²ØÔËÐÐÅäÖá£

¡¡¡¡Äã¿ÉÒÔÔÚÕâÀïÏÂÔÚ±¾½Ì³ÌÀïËùÓÐʾÀýµÄÔ´´úÂë¡£

¡¡¡¡DJ Walker-MorganÊÇÒ»Ãû×Éѯ¿ª·¢ÈËÔ±£¬×¨³¤ÊÇJavaºÍÓû§µ½Óû§µÄÏûÏ¢´«ËͺÍÊÓƵ»áÒé¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ