¿ª·¢ÕßÉçÇø> 1093939397745686> ÕýÎÄ

С°×Êó´øÄã¿ÐSpringÔ´ÂëÖ®BeanDifinition£¨¶þ£©

¼ò½é£º ǰÑÔ Îı¾ÒÑÊÕ¼ÖÁÎÒµÄGitHub²Ö¿â£¬»¶Ó­Star£ºgithub.com/bin39232820¡­ ÖÖÒ»¿ÃÊ÷×îºÃµÄʱ¼äÊÇÊ®Äêǰ£¬Æä´ÎÊÇÏÖÔÚ
+¹Ø×¢¼ÌÐø²é¿´

Ðõß¶


ͬÑùÕâÆªÎÄÕÂÒ²ÊÇÖ±½ÓcopyµÄ,ÒòΪ×Ó·ÀÏʦÒѾ­Ð´µÃºÜºÃÁË¡£ÎÒÕâ±ßÏ൱ÓÚÖØÐÂѧϰһ±é,¼ÓÉîÓ¡Ïó

Èç¹ûÏëϵͳµÄѧϰspringÔ´ÂëÄÇôµÚÒ»¸öÐèÒª¸ãÃ÷°×µÄ֪ʶ±ãÊÇspringµ±ÖеÄBeanDefinition¡ª¡ªspring beanµÄ½¨Ä£¶ÔÏó;Ç°ÃæµÄ


BeanDifinition


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


image


ÉÏͼ´ó¸Å·ÖΪ¢Ü²½(ÕâÀïÖ»ÊÇÌÖÂÛ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ÈÝÆ÷Æô¶¯µÄÖ´ÐÐ˳Ðò

image


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

image


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µÄ¹¦ÄÜ

image


²åÒ»¾ä,¾ÍÊÇÎÒ¾õµÃÈç¹û´ó¼Ò×ã¹»ÊìÁ·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¶ÔÏó;ÓÃÒ»ÕÅͼÀ´ËµÃ÷Ò»ÏÂÕâÁ½ÖÖд·¨µÄÒìͬ

image


ÆäʵµÚÒ»ÖÖ·½·¨ºÍµÚ¶þÖÖ·½·¨¶¼¿ÉÒԵõ½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Âï¡£

°æÈ¨ÉùÃ÷£º±¾ÎÄÄÚÈÝÓɰ¢ÀïÔÆÊµÃû×¢²áÓû§×Ô·¢¹±Ï×£¬°æÈ¨¹éÔ­×÷ÕßËùÓУ¬°¢ÀïÔÆ¿ª·¢ÕßÉçÇø²»ÓµÓÐÆäÖø×÷Ȩ£¬Ò಻³Ðµ£ÏàÓ¦·¨ÂÉÔðÈΡ£¾ßÌ广ÔòÇë²é¿´¡¶°¢ÀïÔÆ¿ª·¢ÕßÉçÇøÓû§·þÎñЭÒé¡·ºÍ¡¶°¢ÀïÔÆ¿ª·¢ÕßÉçÇøÖªÊ¶²úȨ±£»¤Ö¸Òý¡·¡£Èç¹ûÄú·¢ÏÖ±¾ÉçÇøÖÐÓÐÉæÏÓ³­Ï®µÄÄÚÈÝ£¬ÌîдÇÖȨͶËß±íµ¥½øÐоٱ¨£¬Ò»¾­²éʵ£¬±¾ÉçÇø½«Á¢¿Ìɾ³ýÉæÏÓÇÖȨÄÚÈÝ¡£

Ïà¹ØÎÄÕÂ
´ÓMessageSourceÔ´Âë³ö·¢ÊµÕ½spring¡¤i18n¹ú¼Ê»¯µÄÈýÖÖ¸ÄÔì·½°¸
´ÓÔ´ÂëÈ¥¿´MessageSourceµÄ¼¸¸öʵÏÖÀàµÄÔ´Âë³ö·¢£¬»ùÓÚspringµÄ¹ú¼Ê»¯Ö§³Ö£¬ÊµÏÖ¹ú¼Ê»¯µÄ¿ªÏä¼´Ó㬾²Ì¬ÎļþÅäÖÃË¢ÐÂÉúЧÒÔ¼°È«¾ÖÒì³£¹ú¼Ê»¯´¦Àí¡£
42 0
´Ó0µ½1 ÊÖ°ÑÊִspring cloud alibaba ΢·þÎñ´óÐÍÓ¦Óÿò¼Ü£¨Ê®¶þ£©ÈÕ־ƪ(1)£ºrocketmq+ aop +×Ô¶¨Òå×¢½â ʵÏÖÈë²Î³ö²ÎÈÕÖ¾ÊÕ¼¯¼Ç¼ ÍêÕûÔ´Âë
´Ó0µ½1 ÊÖ°ÑÊִspring cloud alibaba ΢·þÎñ´óÐÍÓ¦Óÿò¼Ü£¨Ê®¶þ£©ÈÕ־ƪ(1)£ºrocketmq+ aop +×Ô¶¨Òå×¢½â ʵÏÖÈë²Î³ö²ÎÈÕÖ¾ÊÕ¼¯¼Ç¼ ÍêÕûÔ´Âë
21 0
springboot2.0+spring cloud+eureka£¨·Ö²¼Ê½ÏîÄ¿£©ÏîÄ¿´î½¨Ïêϸ½Ì³Ì£¨¸½¼ÓÔ´Â룩
springboot2.0+spring cloud+eureka£¨·Ö²¼Ê½ÏîÄ¿£©ÏîÄ¿´î½¨Ïêϸ½Ì³Ì£¨¸½¼ÓÔ´Â룩
39 0
´Ó0µ½1 ÊÖ°ÑÊִspring cloud alibaba ΢·þÎñ´óÐÍÓ¦Óÿò¼Ü£¨Î壩 (mini-cloud) SEATA·Ö²¼Ê½ÊÂÎñƪ£¨ÉÏ£© ÔËÐÐÔ­ÀíÒÔ¼°ATģʽԴÂëÆô¶¯°æ¼¯³É
´Ó0µ½1 ÊÖ°ÑÊִspring cloud alibaba ΢·þÎñ´óÐÍÓ¦Óÿò¼Ü£¨Î壩 (mini-cloud) SEATA·Ö²¼Ê½ÊÂÎñƪ£¨ÉÏ£© ÔËÐÐÔ­ÀíÒÔ¼°ATģʽԴÂëÆô¶¯°æ¼¯³É
33 0
SpringÔ´Âë¹¹½¨
SpringÔ´Âë¹¹½¨
29 0
SpringÔ´Âëѧϰ£ºÒ»Æª¸[email protected]ºÍ@Resource×¢½âµÄÇø±ð
×î½üÔÚË¢µ½ºÜ¶àÎÄÕ½²½âSpring IOCÒÀÀµ×¢Èë[email protected]ºÍ@Resource×¢½âµÄÇø±ð£¬²»Í¬µÄÎÄÕÂ×ܽá³öÀ´µÄµãÓÐÒìͬ£¬ËùÒÔ»¹ÊÇ¿´Ô´Âë×Ô¼º×ܽáÒ»ÏÂÆäÁ½ÕßµÄÇø±ð£¬¼°ÆäÓ÷¨¡£
26 0
Spring - ʼþ¼àÌý»úÖÆ Ô´Âë½âÎö
ÖÚËùÖÜÖª£¬Spring FrameworkÔÚ BeanFactoryµÄ»ù´¡ÈÝÆ÷Ö®ÉÏÀ©Õ¹ÎªÁËApplicationContextÉÏÏÂÎÄ¡£ ApplicationContext´¦Àí°üº¬ÁËBeanFactoryµÄÈ«²¿»ù´¡¹¦ÄÜÖ®Í⣬»¹¶îÍâÌṩÁË´óÁ¿µÄÀ©Õ¹¹¦ÄÜ¡£
27 0
SpringÔ´Âë½âÎö֮· Bean¼ÓÔØÆª
SpringÔ´Âë½âÎö֮· Bean¼ÓÔØÆª
48 0
spring-frameworkÔ´ÂëµÚ2µ¯------SpringµÄÕûÌå¼Ü¹¹
Spring ¿ò¼ÜÊÇÒ»¸ö·Ö²ã¼Ü¹¹£¬Ëü°üÀ¨Ò»ÏµÁеŦÄÜÒªËØ£¬²¢±»·ÖΪ´óÔ¼20¸öÄ£¿é£¬
25 0
ÎÄÕÂ
ÎÊ´ð
ÎÄÕÂÅÅÐаñ
×îÈÈ
×îÐÂ
Ïà¹Øµç×ÓÊé
¸ü¶à
µçÉÌÍøÕ¾ÐèÇó·ÖÎöºÍ¼Ü¹¹Éè¼ÆSpring Boot2.6ÈëÃÅ
Á¢¼´ÏÂÔØ
ÔÆÉÏDockerµÄSpring Cloud΢·þÎñÓ¦ÓÃʵ¼ù·ÖÏí
Á¢¼´ÏÂÔØ
Spring Boot 2.6.0µçÉÌÍøÕ¾¿ª·¢ÊµÕ½
Á¢¼´ÏÂÔØ
http://www.vxiaotou.com