Ðõß¶
ͬÑùÕâÆªÎÄÕÂÒ²ÊÇÖ±½ÓcopyµÄ,ÒòΪ×Ó·ÀÏʦÒѾдµÃºÜºÃÁË¡£ÎÒÕâ±ßÏ൱ÓÚÖØÐÂѧϰһ±é,¼ÓÉîÓ¡Ïó
Èç¹ûÏëϵͳµÄѧϰspringÔ´ÂëÄÇôµÚÒ»¸öÐèÒª¸ãÃ÷°×µÄ֪ʶ±ãÊÇspringµ±ÖеÄBeanDefinition¡ª¡ªspring beanµÄ½¨Ä£¶ÔÏó;Ç°ÃæµÄ
BeanDifinition
ÔÚÉÏһƪÎÄÕÂÀïÃæÎÒÃÇÌÖÂÛÁËÒ»¸öbeanDefintion¶ÔÏóµÄÖØÒªÐÔ,ΪÁËÌÖÂÛspringµ±ÖеÄbeanDefinition¶ÔÏóÎÒÃDz»µÃ²»Ç£³¶³öspringµ±ÖеÄbean¹¤³§ºóÖô¦ÀíÆ÷Ò²¾ÍÊÇBeanFactoryPostProcessorÕâ¸öÀà;¼Ì¶øÌÖÂÛÁËBeanFactoryPostProcessorµÄ´ó¸ÅÖ´ÐÐʱ»ú(BeanFactoryPostProcessorµÄÖ´ÐÐʱ»úºÜÖØÒª¶øÇÒspringÄÚ²¿×öµÄÉÔ΢Óе㸴ÔÓ,±¾ÎÄÖØµãÀ´ÌÖÂÛspringÄÚ²¿Ôõô±£Ö¤ÕâЩִÐÐʱ»úµÃÒÔÑϽûµÄÖ´ÐÐ,»¹ÓÐÈçºÎÀ´À©Õ¹springµÄbean¹¤³§ºóÖô¦ÀíÆ÷);Ê×ÏÈͨ¹ýÒ»ÕÅͼ¼òµ¥µÄÀí½âÒ»ÏÂspringÈÝÆ÷Æô¶¯µÄʱºòÖ´Ðе÷ÓÃBeanFactoryPostProcessorºóÖô¦ÀíÆ÷µÄ´ó¸ÅµÄ·½·¨Ö´ÐÐ˳Ðò

ÉÏͼ´ó¸Å·ÖΪ¢Ü²½(ÕâÀïÖ»ÊÇÌÖÂÛspringÈçºÎµ÷ÓÃBeanFactoryPostProcessor,ÔÚµ÷ÓÃ֮ǰµ½µ×Ö´ÐÐÁËÄÇЩ·½·¨,ÉÏͼ²¢²»ÊÇspringÈÝÆ÷Æô¶¯µÄËùÓв½Öè) ¢ÙÆô¶¯main·½·¨,ÔÚmain·½·¨ÀïÃæµ÷Óà ¢ÚAnnotationConfigApplicationContextµÄÎ޲ι¹Ôì·½·¨,È»ºó¢Ú-1ÔÚÎ޲ι¹Ôì·½·¨ÀïÃæÊ×ÏÈʵÀý»¯AnnotatedBeanDefinitionReader¶ÔÏó,ʵÀý»¯Õâ¸ö¶ÔÏóÓÐÁ½¸ö·Ç³£ÖØÒªµÄÒâÒå¡£ 1¡¢Õâ¸ö¶ÔÏóʵÀý»¯³öÀ´ÓÐʲôÓÃ(ÎÊÌâÒ») ; 2¡¢ÊµÀý»¯Õâ¸ö¶ÔÏóµÄ¹ý³ÌÖÐ×öÁËÄÄЩÊÂÇé(ÎÊÌâ¶þ)
ËùÓеÄÎÊÌâX,ÎÄÕºóÃæÔÙ½âÊÍ,ÕâÀïÏȰѲ½Öè¸ãÇå³þ
¼Ì¶ø¢Ú-2springÓÖʵÀý»¯ÁËÒ»¸öClassPathBeanDefinitionScanner¶ÔÏó,Õâ¸ö¶ÔÏó¹ËÃû˼Òå¾ÍÊÇÄܹ»ÓÃÀ´Íê³ÉspringµÄɨÃ蹦ÄÜ,µ«ÊÇÕâÀïÌáÒ»¾ä¡ª¡ªspringÄÚ²¿Íê³ÉɨÃ蹦Äܲ¢²»ÊÇÓõÄÕâ¸ö¶ÔÏó,¶øÊÇÔÚɨÃèµÄʱºòÓÖnewÁËÒ»¸öеÄ
ClassPathBeanDefinitionScanner¶ÔÏó;»»ÑÔÖ®ÕâÀïspring newµÄ¶ÔÏóÎÒÃǼÙÉèËûΪa,µ«ÊÇspringÔÚÕæÕýÍê³ÉɨÃèµÄʱºòÓÖnewÁËÒ»¸öb,µ«ÊÇÊÇͬһ¸öÀà¶¼ÊÇClassPathBeanDefinitionScanner,µ«ÊÇΪʲôÐèÒªÁ½¸ö? 3¡¢Ö±½ÓÓÃa²»¾Í¿ÉÒÔÁËÂð?Èç¹ûspringÄÚ²¿Íê³ÉɨÃèʱºòûÓÃa,ÄÇôa±»new³öÀ´ÔÚÄÄÀïʹÓÃÁË?(ÎÊÌâÈý)µ½´ËΪֹµÚ¢Ú²½Íê³É;
¢Ûµ÷ÓÃregister(Appconfig.class);Ê×ÏÈ»á°ÑAppconfigÀà½âÎö³ÉΪһ¸öbeanDefintion¶ÔÏó(ÈçºÎ°ÑÒ»¸öÀà½âÎö³ÆÎªbeanDefinition¶ÔÏóµÄ?ÕâÀïÆäÊµÉæ¼°µ½¢Ú-1AnnotatedBeanDefinitionReader¶ÔÏóµÄÒâÒå,Èç¹ûÄãÃ÷°×ÁË¢Ú-1ÕâÀïÒ²¾ÍÃ÷°×ÁË),È»ºó¸ø½âÎö³öÀ´µÄbeanDefinition¶ÔÏóÉèÖÃһЩĬÈÏÊôÐÔ,¼Ì¶øputµ½beanDefintionMapµ±ÖÐ;ΪʲôÐèÒªputµ½beanDefintionMapÄØ?
ÔÚÉÏһƪÎÒÃÇÒѾ½âÊ͹ýÕâ¸ömap¾ÍÊǵ¥´¿ÓÃÀ´´æ´¢beanDefinitionµÄ,springºóÃæ»á±éÀúÕâ¸ömap¸ù¾Ýmapµ±ÖеÄbeanDefinitionÀ´ÊµÀý»¯bean,Èç¹ûAppconfigÀàµÄbeanDefintion´æÔÚÔÚmapµ±ÖÐÄÇôËû±ØÈ»»á±»springÈÝÆ÷ʵÀý»¯³ÆÎªÒ»¸öbean?ΪʲôAppconfig»áÐèҪʵÀý»¯ÄØ?ÒòΪAppconfigµ±ÖÐÓкܶà¼ÓÁË@BeanµÄ·½·¨,ÕâЩ·½·¨ÐèÒª±»µ÷ÓÃ,¹Ê¶øÐèҪʵÀý»¯,µ«ÊÇAppconfigÀàµÄʵÀý»¯ºÜ¸´ÔÓ±ÈÒ»°ãÀàʵÀý»¯¹ý³Ì¸´ÔӺܶà,Éæ¼°µ½´úÀíÉæ¼°µ½cglibµÈµÈ,Õâ¸öÎÒÃǺóÃæÎÄÕ½âÊÍ;ÕâÀﻹÐèÒª½âÊÍÒ»¸öÎÊÌâ,ΪʲôAppconfigÀàÊÇͨ¹ýregister(Appconfig.class);ÊÖ¶¯putµ½mapµ±ÖÐÄØ?Ϊʲô²»ÊÇɨÃè³öÀ´µÄÄØ?(Ò»°ãÀà¶¼ÊÇͨ¹ýɨÃè³öÀ´µÄ),ÆäʵҲºÜ¼òµ¥,ÒòΪËûÎÞ·¨É¨Ãè×Ô¼º,Ò»°ãÀàÊÇspringͨ¹ý½âÎöAppconfigÉϵÄ@ComponentScan×¢½âÈ»ºó±»É¨Ãèµ½,ËùÒÔÎÞ·¨É¨Ãè×Ô¼º;
½ÓÏÂÀ´±ãÊÇµÚ ¢Ü²½,¢Ü-1µ½¢Ü-4ÒÔºó·ÖÎö,¢Ü-5±ãÊÇÎÒÃÇÉÏÆªÎÄÕÂ˵µÄÖ´ÐÐspringµ±ÖеÄbean¹¤³§ºóÖô¦ÀíÆ÷,Ò²ÊDZ¾ÎÄÖØµãÌÖÂÛµÄ;ÏÂͼÊǶÔÉÏÊöÎÄ×ÖµÄÒ»¸ö˵Ã÷¡ª¡ªspringÈÝÆ÷Æô¶¯µÄÖ´ÐÐ˳Ðò

½ÓÏÂÀ´½âÊÍÉÏÃæÎÄ×ÖÀïµÄËùÓÐÎÊÌâ ÎÊÌâÒ»¡ª¡ªAnnotatedBeanDefinitionReaderÕâ¸ö¶ÔÏóʵÀý»¯³öÀ´ÓÐʲôÓÃ? ÏÈ¿´Ò»ÏÂÕâ¸öÀàµÄjavadoc,¿´¿´×÷ÕßÔõôÀ´½âÊÍÕâ¸öÀàµÄ

Convenient adapter for programmatic registration of annotated bean classes. * This is an alternative to {@link ClassPathBeanDefinitionScanner}, applying * the same resolution of annotations but for explicitly registered classes only
°´ÕÕ±ÊÕßõ¿½ÅµÄÓ¢ÎÄˮƽÎÒµÄÀí½âÊÇ:Õâ¸öÀà×÷Ó÷ÖΪÒÔÏÂÁ½¸ö 1¡¢¿ÉÓÃÓÚ±à³Ìʽ¶¯Ì¬×¢²áÒ»¸ö´ø×¢½âµÄbean,ʲôÒâË¼ÄØ?±ÈÈçÎÒÃÇÓÐÒ»¸öÀàA´æÔÚcom.shadow°üÏÂÃæ,²¢ÇÒÊÇÒ»¸ö¼Ó×¢½âµÄÀà¡£±ÈÈç¼ÓÁË@Component,Õý³£Çé¿öÏÂÕâ¸öÀàAÒ»°ãÊDZ»springɨÃè³öÀ´µÄ,µ«ÊÇÓв»Õý³£Çé¿ö,±ÈÈçspring²¢Ã»ÓÐɨÃèµ½com.shadow°ü,ÄÇôÀàA¾ÍÎÞ·¨±»ÈÝÆ÷ʵÀý»¯¡£ÓÐÈË¿ÉÄÜ»áÎÊΪʲôûÓÐɨÃèµ½com.shadow°ü?ɨÃèÇé¿öϲ»»áɨÃèµ½?ÆäʵºÜ¼òµ¥,¼ÙÉèÄãµÄÕâ¸öÀàÊǶ¯Ì¬Éú³É,ÔÚÈÝÆ÷ʵÀý»¯µÄʱºò²»´æÔÚÄÇô¿Ï¶¨²»´æÔÚ,ÔÙ»òÕßÕâ¸ö°üÏÂÃæÓÐN¶àÀ൫ÊÇÖ»ÓÐÒ»¸öÀà¼ÓÁË×¢½â,ÄÇôÆäʵÄã²»ÐèҪȥɨÃè,Ö»ÐèÒªÌí¼ÓÕâÒ»¸ö¼ÓÁË×¢½âµÄÀ༴¿É,ÔÙ»òÕßÒ»¸öÀàÊÇÄãºÍµÚÈý·½ÏµÍ³½»»¥ºóµÃµ½µÄ¡£ÄÇôÕâ¸öʱºòÎÒÃÇ¿ÉÒÔ°ÑÕâ¸öÀàͨ¹ýAnnotatedBeanDefinitionReaderµÄ
register(Class clazz)·½·¨°ÑÒ»¸ö´ø×¢½âµÄÀà×¢²á¸øspring(ÕâÀïµÄ×¢²áÆäʵ¾ÍÊÇÉÏһƪÎÄÕÂÖÐ˵µÄ°ÑÒ»¸öÀà½âÎö³ÉBeanDefintion¶ÔÏó,È»ºó°ÑÕâ¸ö¶ÔÏóputµ½beanDefinitionMapµ±ÖÐ),д¸öÀý×ÓÀ´²âÊÔÒ»ÏÂËûµÄÕâ¸ö×¢²ábeanµÄ¹¦ÄÜ

²åÒ»¾ä,¾ÍÊÇÎÒ¾õµÃÈç¹û´ó¼Ò×ã¹»ÊìÁ·Spring ¾Í²»»á˵ֻ»á,¿ª·¢ÄÇÑùд¼¸¸ö×¢½â,È»ºóÒ»²½²½°´ÕÕ,ÒÔǰµÄÌ×·À´,³öÏÖÎÊÌâÖ»»á°Ù¶È,ºÍÎÒ¿ªÊ¼Ñ§µÄʱºòÒ»Ñù,µ«ÊÇÆäʵ×îºÃµÄ´ð°¸ÊÇÔÚÔ´ÂëÀïÃæ,µ«ÊÇǰÌáÊǶÔÔ´Âë×ã¹»µÄÊìϤ¹þ¡£
2¡¢¿ÉÒÔ´úÌæClassPathBeanDefinitionScannerÕâ¸öÀà,¾ß±¸ÏàͬµÄ×¢½â½âÎö¹¦ÄÜ, ClassPathBeanDefinitionScannerÊÇspringÍê³ÉɨÃèµÄºËÐÄÀà,Õâ¸öÎÒºóÃæ»á·ÖÎö;¼ò¶øÑÔÖ®,springÍê³ÉɨÃèÖ÷ÒªÊÇÒÀ¿¿ClassPathBeanDefinitionScannerÕâ¸öÀàµÄ¶ÔÏó,µ«ÊÇAnnotatedBeanDefinitionReader¿ÉÒÔÌæ´úËûÍê³ÉÏàͬµÄ×¢½â½âÎö,Òâ˼¾ÍÊÇͨ¹ýClassPathBeanDefinitionScannerɨÃè³öÀ´µÄÀàAºÍͨ¹ýAnnotatedBeanDefinitionReaderÏÔʾע²áµÄÀàAÔÚspringÄÚ²¿»áÒ»Ì×ÏàͬµÄ½âÎö¹æÔò;ÕâµãÉÏÃæÄǸöÀý×ÓÒѾ֤Ã÷ÁË¡£
ôAnnotatedBeanDefinitionReader³ýÁ˶¯Ì¬ÏÔʾע²áһЩspringɨÃè²»µ½µÄÀàÖ®Í⻹ÓÐʲô¹¦ÄÜ?ÔÚ³õʼ»¯springÈÝÆ÷µÄ¹ý³ÌÖÐËûÖ÷Òª¸ÉÁËʲôÊÂÇéÄØ?»òÕßÕâô˵:¼ÙÉè³ÌÐòÖÐûÓÐÐèÒª¶¯Ì¬ÏÔʾע²áµÄÀàËû¾ÍûÓÃÁËÂð?ÔÙ»òÕßAnnotatedBeanDefinitionReaderÕâ¸öÀàµÄ¶ÔÏó³ýÁË×¢²áһЩ×Ô¼ºµÄÀ໹ÓÐʲôӦÓó¡¾°ÄØ?¡ª¡ª×¢²áÎÒÃǵÄÅäÖÃÀà,¶ÔÓÚ²»Àí½âÊÇʲôÅäÖõĶÁÕß¿ÉÒÔÀí½âËùνµÄÅäÖÃÀà¾ÍÊÇÄǸö¼ÓÁË@ConfigurationºÍ@ComponentScanµÄÄǸöÀà,Ò²¾ÍÊÇAppconfig.java; ÄÇôÎÊÌâÀ´ÁË,ΪʲôÅäÖÃÀàÐèÒªÊÖ¶¯×¢²áÄØ?ºÜ¼òµ¥ÒòΪÅäÖÃÀàÎÞ·¨É¨Ãè³öÀ´,ËùÒÔÐèÒªÎÒÃÇÊÖ¶¯×¢²á¡£ÎªÊ²Ã´ÎÞ·¨É¨ÃèÄØ?±ÈÈçspringÍê³ÉɨÃèÊÇÐèÒª½âÎö
Appconfig.javaµ±ÖеÄ@ComponentScan×¢½âµÄÖµ(Ò»°ãÊÇÒ»¸ö°üÃû),µÃµ½Õâ¸öÖµÖ®ºóȥɨÃèÕâ¸öÖµËù´ú±íµÄ°üÏÂÃæµÄËùÓÐbean;¼òµ¥µÄ˵¾ÍÊÇspringÈç¹ûÏëÒªÍê³ÉɨÃè±ØÐëÏÈÌṩAppconfig.java,ËùÒÔAppconfig.javaÒªÔÚÒ»¿ªÊ¼¾ÍÊÖ¶¯×¢²á¸øspring,springµÃµ½Appconfig.classÖ®ºó°ÑËû½âÎö³ÉBeanDefintion¶ÔÏó,¼Ì¶øÈ¥»ñÈ¡@ComponentScanµÄֵȻºó²Å¿ªÊ¼É¨ÃèÆäËûbean;
×ܽá:AnnotatedBeanDefinitionReaderµÄ×÷ÓÃ1¡¢Ö÷ÒªÊÇ¿ÉÒÔ¶¯Ì¬¡¢ÏÔʾµÄ×¢²áÒ»¸öbean;2¡¢¶øÇҾ߱¸½âÎöÒ»¸öÀàµÄ¹¦ÄÜ;ºÍɨÃè½âÎöÒ»¸öÀàµÄ¹¦ÄÜÏàͬ;AnnotatedBeanDefinitionReaderµÄÓ¦Óó¡¾°1¡¢¿ÉÒÔÏÔʾ¡¢¶¯Ì¬×¢²áÒ»¸ö³ÌÐòÔ±ÌṩµÄbean;2¡¢ÔÚ³õʼ»¯springÈÝÆ÷µÄ¹ý³ÌÖÐËûÍê³ÉÁ˶ÔÅäÖÃÀàµÄ×¢²áºÍ½âÎö¹¦ÄÜ;
Õë¶ÔAnnotatedBeanDefinitionReaderÓ¦Óó¡¾°µÄµÚ2µã,ÎÒÔÚ†ªà¼¸¾ä,Ò»°ã³ÌÐòÔ±ÔÚ³õʼ»¯springÈÝÆ÷µÄʱºò´úÂëÓкܶàÖÖд·¨,µ«¶¼ÊÇ»»ÌÀ²»»»Ò©µÄ,ÎÒÕâÀï¾Ù2¸öÀõ×Ó¡£ µÚÒ»ÖÖд·¨:
AnnotationConfigApplicationContext ac =
new AnnotationConfigApplicationContext();
//¶¯Ì¬×¢²áÒ»¸öÅäÖÃÀà
ac.register(Appconfig.class);
//µ÷ÓÃrefresh·½·¨
//ÕâÀïºÜ¶à×ÊÁ϶¼½Ð×öË¢ÐÂspringÈÝÆ÷
//µ«ÊÇÎÒ¾õµÃ²»ºÏÊÊ,ÕâÊÇÓ²ºË·Òë,±È½ÏÉúÓ²
//±ÊÕß¾õµÃÀí½âΪ³õʼ»¯springÈÝÆ÷¸ü¼Ó¾«×¼
//ÖÁÓÚΪʲôÒÔºóÂýÂý¸üÐÂÔÙ˵
ac.refresh();
¸´ÖÆ´úÂë
µÚ¶þÖÖд·¨:
AnnotationConfigApplicationContext ac =
new AnnotationConfigApplicationContext(Appconfig.class);
¸´ÖÆ´úÂë
ÕâÁ½ÖÖд·¨¶¼³õʼ»¯springÈÝÆ÷,´úÂëÉϵÄÇø±ðÎ޷ǾÍÊǵÚÒ»ÖÖд·¨Êǵ÷ÓÃAnnotationConfigApplicationContext();µÄÎ޲ι¹Ôì·½·¨,µÚ¶þÖÖд·¨Êǵ÷ÓÃÁËAnnotationConfigApplicationContext(Class<?>... annotatedClasses)Óвι¹Ôì·½·¨;µ«ÊÇÄãÈç¹û·ÔÄÔ´ÂëµÚ¶þÖÖд·¨µÄÄÚ²¿Ò²ÊÇÊ×Ïȵ÷ÓÃÎ޲ι¹Ôì·½·¨µÄ,¼Ì¶øÄÚ²¿¼ÌÐøµ÷ÓÃregister(Appconfig.class)·½·¨,×îºóµ÷ÓÃrefresh();·½·¨,ºÍµÚÒ»ÖÖд·¨µÄÇø±ðÊÇregisterºÍrefreshÊdzÌÐòÔ±µ÷ÓõÄ;±ÊÕ߸üÍÆ¼öµÚÒ»ÖÖд·¨,ÒòΪµÚÒ»ÖÖд·¨¿ÉÒÔÔÚ³õʼ»¯springÈÝÆ÷֮ǰµÃµ½AnnotationConfigApplicationContextµÄ¶ÔÏóÒ²¾ÍÊÇ´úÂëÀïÃæµÄac¶ÔÏó;ÓÃÒ»ÕÅͼÀ´ËµÃ÷Ò»ÏÂÕâÁ½ÖÖд·¨µÄÒìͬ

ÆäʵµÚÒ»ÖÖ·½·¨ºÍµÚ¶þÖÖ·½·¨¶¼¿ÉÒԵõ½ac¶ÔÏó,ÄÇôΪʲôµÚÒ»ÖÖд·¨±ÊÕßÍÆ¼öÄØ?Ê×ÏȵڶþÖÖ·½·¨ÊÇÔÚspringÈÝÆ÷Íê³É³õʼ»¯Ö®ºóµÄµ½µÄac¶ÔÏó,ÈÝÆ÷ÒѾ³õʼ»¯ÁË,Õâ¸öʱºòµÃµ½Õâ¸ö¶ÔÏóÄܸÉÁËÊÂÇéÉÙÁ˺ܶà;µÚÒ»ÖÖ·½·¨ÔÚ³õʼ»¯Ö®Ç°µÃµ½µÄ,ÄÇôÄܸɵÄÊÂÇé¿É¶àÁË¡£¢Ù±ÈÈçÎÒÃÇ¿ÉÒÔÔÚÈÝÆ÷³õʼ»¯Ö®Ç°¶¯Ì¬×¢²áÒ»¸ö×Ô¼ºµÄbean,¾ÍÊÇÉÏÎÄÌáµ½µÄ AnnotatedBeanDefinitionReaderµÄÓ¦Óó¡¾°,¢ÚÔÙ±ÈÈç¿ÉÒÔÀûÓÃac¶ÔÏóÀ´¹Ø±Õ»òÕß¿ªÆôspringµÄÑ»·ÒÀÀµ,ÔÚ±ÊÕߵĵÚһƪ²©¿ÍÀïÃæÒ²ÓÐÌáµ½,¢Û»¹±ÈÈç³ÌÐòÔ±¿ÉÒÔÔÚÈÝÆ÷³õʼ»¯Ö®Ç°×¢²á×Ô¼ºÊµÀý»¯µÄBeanDefinition¶ÔÏó¡£Èç¹ûÄãÏñ±ÊÕßÒ»Ñù¾«Í¨
springÔ´ÂëÄã»á·¢¾õÌáǰµÃµ½Õâ¸öac¶ÔÏó¿ÉÒÔ×öµÄÊÂÇéÌ«¶àÁË,±ÊÕßÕâÀï˵µÄÈý¸ö±ÈÈç¶¼±ØÐëÔÚspringÈÝÆ÷³õʼ»¯Ö®Ç°×ö²ÅÓÐÒâÒå,¼ò¶øÑÔÖ®¾ÍÊÇÐèÒªÔÚspringµ÷ÓÃrefresh·½·¨Ö®¼ä×ö²ÅÓÐÒâÒå;Èç¹ûÄã²»Àí½âÎÒ´ò¸ö±È½ÏÎ۵ıȷ½; ¼ÙÉèÓлú»áÔ¼µ½Ä³ÇÇÐÕÍøºì,ÎÞ±ÈÐË·ÜÖ®ºóÏÖÔÚÀ´·ÖÎöÆðÒòºÍ×îÖÕ½á¹û;ÆðÒòÊÇËýÔ¸Òâ³öÀ´ºÍÄãÔ¼»á,½á¹ûÊÇÔ¼»áÍê³É×îÖÕËý»¹ÊÇÒª»Ø¼ÒµÄ¡£µ«Êǹý³Ì¿ÉÒԺܾ«²Êѽ!¶Ô±ÈspringµÄÔ´ÂëÆðÒòÊÇÄãÊ×Ïȳɹ¦ÊµÀý»¯ÁËÒ»¸öac¶ÔÏó(ac³É¹¦ÊµÀý»¯==Äã³É¹¦Ô¼»á==new³öÀ´µÄac¶ÔÏó==Ô¼³öÀ´µÄÇǹÃÄï)`,½á¹ûÊǵ÷ÓÃac.refresh()Íê³É³õʼ»¯springÈÝÆ÷,Ï൱ÓÚÇǹÃÄï»Ø¼Ò==Íê³ÉÔ¼»á;
ÄÇôÄãÏëһϵÚÒ»ÖÖ·½Ê½ÊÇÄã³É¹¦ÊµÀý»¯Ò»¸öac¶ÔÏó,ÔÚÍê³É³õʼ»¯Ö®Ç°¿ÉÒÔËÁÒâÍýΪ,³ýÁ˶ÔacÕâ¸ö¶ÔÏóΪËùÓûΪ(µ÷ÓÃacµÄapi)Ö®Í⻹¿ÉÒÔдÈκÎÄã×Ô¼ºÏëдµÄ´úÂë;Ï൱ÓÚÄã³É¹¦Ô¼µ½ÇǹÃÄï,È»ºó****************Äã¿ÉÒÔÄõ½ËýµÄÉí·ÝÖ¤¡£µ«ÊǵڶþÖÖ·½Ê½Ï൱ÓÚÄãÔ¼µ½ÁËÇǹÃÄï,µ«ÊÇÔ¼»áµÄ¹ý³ÌÄãû°ì·¨²ÎÓë¶¼ÊǹÃÄï×Ô¼º°²ÅÅ,Ëý¿ÉÄܺÍÄã¿´ÍêµçÓ°Ö®ºó¾Í¸æËßÄãÉí·ÝÖ¤¶ªÁËÈ»ºó¸÷»Ø¸÷¼Ò;ËùÒÔ±ÊÕßÍÆ¼öʹÓõÚÒ»ÖÖ·½Ê½ÊµÀý»¯springÈÝÆ÷¡£¡£¡£¡£ÖÁÓÚÔÒòÎÒÒѾ˵µÄ¹»Çå³þÁË¡£
µ½´ËΪֹÒѾ½âÊÍÍêÁËÎÊÌâÒ»¡ª¡ªAnnotatedBeanDefinitionReaderÕâ¸ö¶ÔÏóʵÀý»¯³öÀ´ÓÐʲôÓÃ?
ÄÇôÎÊÌâ¶þºÍÎÊÌâÈý ÏÂÆªÎÄÕÂÌÖÂÛ,ΪÁË˵Çå³þspringµ±ÖÐBeanDefintion±ÊÕßÒѾдÁËÁ½Æª²©¿Í(¸ù±¾Ã»ÓнøÈëBeanDefintionµÄÖ÷Ìâ),֮ǰ˵¹ý»áÓÃÈýƪÎÄÕÂÀ´·ÖÎö,¿´À´ÐèҪʳÑÔÁË,ÏëÁËÒ»ÏÂÖÁÉÙÐèÒªÎåÆª²ÅÄÜ˵Çå³þ
½áβ
ÎÒcopyÕâÆªÎÄÕµÄÔÒò,ÎÒÊÇÕæ¾õµÃ½²µÃºÃ,¶ÔSpringÔ´ÂëµÄÀí½â¿Ï¶¨Êǵ½ÁËÒ»¶¨µÄÉî¶È,¶ÔÓÚÎÒÕâÖÖ³õÉæÔ´ÂëµÄС°×¶¼ÄÜÀí½â,ËùÒÔÏë×Å·ÖÏí¸ø´ó¼Ò¡£È»ºóÎÒ¿ÉÊǸú×ÅdebugÁËÒ»±é¹þ¹þ¡£½¨ÒéËùÓеĶÁÕß²»Òª¿´Á˾ÍËãÁË,¿ÉÒÔ¿´Ò»±é,×Ô¼ºÔÙdebugÒ»±é,ÒÔºóÓпÕÔÙ»¸öÁ÷³Ìͼ,»ù±¾ÉϾÍת»»³É×Ô¼ºµÄ¶«Î÷ÁË,Ò»¿ªÊ¼¶¼ÊÇcopyÂï¡£