±à¼ÍƼö: |
ÎÄÕÂÖ÷Òª½éÉÜÁËSpringµÄºËÐÄÈÝÆ÷ÒÔ¼°springÓëbeanµÄ¹ØÏµ£¬ÈÝÆ÷ÖÐBeanµÄÉúÃüÖÜÆÚ£¬×îºó¶ÔspringÖÐbeanÅäÖã¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£
|
|
Ò». IOCºÍDI»ù´¡
IOC-Inversion of Control£¬ÒëΪ¿ØÖÆ·´×ª£¬ÊÇÒ»ÖÖ×ñÑÒÀÀµµ¹ÖÃÔÔòµÄ´úÂëÉè¼ÆË¼Ïë¡£
ËùνÒÀÀµµ¹Ö㬾ÍÊǰÑÔ±¾µÄ¸ß²ã½¨ÖþÒÀÀµµ×²ã½¨Öþ¡°µ¹Öá±¹ýÀ´£¬±ä³Éµ×²ã½¨ÖþÒÀÀµ¸ß²ã½¨Öþ¡£¸ß²ã½¨Öþ¾ö¶¨ÐèҪʲô£¬µ×²ãȥʵÏÖÕâÑùµÄÐèÇ󣬵«ÊǸ߲㲢²»ÓùܵײãÊÇÔõôʵÏֵġ£ÕâÑù¾Í²»»á³öÏÖÇ°ÃæµÄ¡°Ç£Ò»·¢¶¯È«Éí¡±µÄÇé¿ö¡£
¶ø¿ØÖÆ·´×ª¾ÍÊǰѴ«Í³³ÌÐòÖÐÐèҪʵÏÖ¶ÔÏóµÄ´´½¨¡¢´úÂëµÄÒÀÀµ£¬·´×ª¸øÒ»¸öרÃŵÄ"µÚÈý·½"¼´ÈÝÆ÷À´ÊµÏÖ£¬¼´½«´´½¨ºÍ²éÕÒÒÀÀµ¶ÔÏóµÄ¿ØÖÆÈ¨½»¸øÈÝÆ÷£¬ÓÉÈÝÆ÷½«¶ÔÏó½øÐÐ×éºÏ×¢È룬ʵÏÖ¶ÔÏóÓë¶ÔÏóµÄËÉñîºÏ£¬±ãÓÚ¹¦Äܵĸ´Óã¬Ê¹³ÌÐòµÄÌåϵ½á¹¹¸üÁé»î¡£

DI-Dependency Injection,ÒëΪÒÀÀµ×¢È룬ʵ¼ÊÉÏÊǶÔIocµÄÁíÒ»Öֳƺô¡£2004Ä꣬´óʦ¼¶ÈËÎïMartin
FowlerΪ¡°¿ØÖÆ·´×ª¡±È¡ÁËÒ»¸ö¸üºÏÊʵÄÃû×Ö¡°ÒÀÀµ×¢È롱¡£¸ø³öÁËʵÏÖIOCµÄ·½·¨£º×¢Èë¡£ËùνÒÀÀµ×¢È룬¾ÍÊÇÓÉIOCÈÝÆ÷ÔÚÔËÐÐÆÚ¼ä£¬¶¯Ì¬µØ½«Ä³ÖÖÒÀÀµ¹ØÏµ×¢Èëµ½¶ÔÏóÖ®ÖС£
Àí½âIOCºÍDIµÄ¹Ø¼ü£º
¿ØÖÆ·´×ª£¬Ë¿ØÖÆÁËË£¿--IOCÈÝÆ÷¿ØÖÆÁ˶ÔÏ󣻿ØÖÆÁËʲô£¿--¿ØÖÆÁËÍⲿ×ÊÔ´µÄ»ñÈ¡£¨¶ÔÏó£¬ÎļþµÈ£©£»ÄÄЩ·½ÃæµÄ¿ØÖƱ»·´×ªÁË£¿--»ñµÃÒÀÀµ¶ÔÏóµÄ¹ý³Ì±»·´×ªÁË¡£
ÒÀÀµ×¢È룬ËÒÀÀµË£¿--³ÌÐòÒÀÀµIOCÈÝÆ÷£»ÎªÊ²Ã´ÐèÒªÒÀÀµ£¿--³ÌÐòÐèÒªIOCÈÝÆ÷À´ÌṩÍⲿ×ÊÔ´£»Ë×¢ÈëË£¿--IOCÈÝÆ÷Ïò³ÌÐò×¢È룻עÈëÁËʲô£¿--×¢Èëij¸ö¶ÔÏóËùÐèÒªµÄÍⲿ×ÊÔ´¡£
ÒÀÀµ×¢Èë(DI)ºÍ¿ØÖÆ·´×ª(IOC)ÊÇ´Ó²»Í¬µÄ½Ç¶ÈµÄÃèÊöµÄͬһ¼þÊÂÇ飬¾ÍÊÇָͨ¹ýÒýÈëIOCÈÝÆ÷£¬ÀûÓÃÒÀÀµ¹ØÏµ×¢ÈëµÄ·½Ê½£¬ÊµÏÖ¶ÔÏóÖ®¼äµÄ½âñî¡£
¶þ. SpringÈÝÆ÷ÓëBean
1. springºËÐÄÈÝÆ÷¡¡¡¡
springµÄºËÐÄÈÝÆ÷°üÀ¨ÁË£ºBeans¡¢Core¡¢Context¡¢SpEL
¢Ù coreºÍbeansÄ£¿éÌṩÁËÕû¸ö¿ò¼Ü×î»ù´¡µÄ²¿·Ö£¬°üÀ¨ÁËIOCºÍDI¡£
¢Ú Context½¨Á¢ÔÚCoreºÍBeansÄ£¿éÌṩµÄ»ù´¡Ö®ÉÏ£ºËûÌṩÁË¿ò¼Üʽ·ÃÎʶÔÏóµÄ·½Ê½
¢Û core¡¢beans¡¢context¹¹³ÉÁËSpringµÄ¹Ç¼Ü
¢Ü SpEL:ÌṩÁËÒ»ÖÖÇ¿´óµÄÓÃÓÚÔÚÔËÐÐʱ²Ù×÷¶ÔÏóµÄ±í´ïʽÓïÑÔ
org.springframework.beans.factory.BeanFactoryÊÇSpringÈÝÆ÷µÄʵ¼Ê´ú±íÕߣ¬ÈÝÆ÷¸ºÔðÈÝÄÉ´ËǰËùÃèÊöµÄbean£¬²¢¶Ôbean½øÐйÜÀí¡£
2. springÓëbeanµÄ¹ØÏµ
SpringÈÝÆ÷ÊÇSpringµÄºËÐÄ£¬Ò»ÇÐSpringBean¶¼´æ´¢ÔÚSpringÈÝÆ÷ÄÚ¡£¿ÉÒÔ˵beanÊÇspringºËÐÄÖеĺËÐÄ¡£BeanÅäÖÃÐÅÏ¢¶¨ÒåÁËBeanµÄʵÏÖ¼°ÒÀÀµ¹ØÏµ£¬SpringÈÝÆ÷¸ù¾Ý¸÷ÖÖÐÎʽµÄBeanÅäÖÃÐÅÏ¢À´´´½¨BeanʵÀý£¬²¢µ÷ÓÃBeanʵÀýµÄ·½·¨À´Íê³É¡°ÒÀÀµ×¢È롱£¬¿ÉÒÔ°ÑSpringÈÝÆ÷Àí½â³ÉÒ»¸ö´óÐ͹¤³§£¬Bean¾ÍÊǸù¤³§µÄ²úÆ·£¬¹¤³§(SpirngÈÝÆ÷)ÀïÄÜÉú²ú³öÀ´Ê²Ã´ÑùµÄ²úÆ·£¨Bean£©£¬Íêȫȡ¾öÓÚÅäÖÃÎļþÖеÄÅäÖ᣶øÕâ¸öÅäÖÃÊÇÓÉ¿ª·¢ÈËÔ±´´½¨ºÍά»¤µÄ¡£
3. BeanµÄ×÷ÓÃÓò¡¡
springµÄ×÷ÓÃÓòÓÐsingleton,prototype,request,session,globle
session¡£
ÕâÀïÖ»ÌÖÂÛ³£ÓõÄsingletonºÍprototypeÁ½ÖÖ×÷ÓÃÓò
¶ÔÓÚsingleton×÷ÓÃÓò£¬Ã¿´ÎÇëÇóͬidµÄBean¶¼½«»ñµÃÏàͬµÄʵÀý£¬springÈÝÆ÷¸ºÔð¸ú×ÙBeanʵÀý״̬£¬¸ºÔðά»¤BeanʵÀýµÄÉúÃüÖÜÆÚ¡£
¶ÔÓÚprototype×÷ÓÃÓò£¬³ÌÐòÿ´ÎÇëÇóͬidµÄBean»á»ñµÃеÄʵÀý£¬springÈÝÆ÷Ö»¸ºÔð´´½¨£¬Ò»µ©´´½¨³É¹¦¾ÍÈöÊÖ²»¹Ü£¬²»ÔÙ¹ÜÀíBeanʵÀýµÄÉúÃüÖÜÆÚ£¬Ò²²»»áά»¤BeanʵÀýµÄ״̬¡£
4. ÈÝÆ÷ÖÐBeanµÄÉúÃüÖÜÆÚ¡¡
Spring¿ÉÒÔ¹ÜÀísingleton×÷ÓÃÓòBeanµÄÉúÃüÖÜÆÚ£¬Spring¿ÉÒÔ¾«È·µØÖªµÀsingletonÓòbeanºÎʱ±»´´½¨£¬ºÎʱ³õʼ»¯Íê³É£¬ÒÔ¼°ÈÝÆ÷ºÎʱ׼±¸Ïú»ÙBeanʵÀý¡£¶ÔÓÚsingleton×÷ÓÃÓòµÄBean£¬¹ÜÀíBeanµÄÉúÃüÖÜÆÚÐÐΪÖ÷ÒªÓÐÁ½¸öʱ»ú£º×¢ÈëÒÀÀµ¹ØÏµºó£¬Ïú»ÙʵÀý֮ǰ£»¾ßÌåµÄ¹ÜÀí·½·¨ÈçÏ£º
SpringÌṩÁ½ÖÖ·½Ê½ÔÚBeanÈ«²¿ÊôÐÔÉèÖóɹ¦ºóÖ´ÐÐÌØ¶¨ÐÐΪ
ʹÓÃinit-method ÊôÐÔ£¨´úÂëÎÛȾС£©
ÔÚÀàÖбàдһ¸ö·½·¨£¬ÔÚÊôÐÔÖÐÖ¸¶¨¸Ã·½·¨ÔÚÒÀÀµ¹ØÏµÉèÖÃÍê³Éºó×Ô¶¯Ö´ÐС£
ʵÏÖInitializingBean½Ó¿Ú£¨ñîºÏ½Ï¸ß£©
±àдafterPropertiesSet()·½·¨µÄ¾ßÌåʵÏÖ
ͬÀí£¬ÈôÔÚBeanÏú»Ù֮ǰ£¬Ö´ÐÐÌØ¶¨µÄ·½·¨£¬Ö»ÐèҪʹÓà destroy-methodÊôÐÔ»òʵÏÖDisposableBean½Ó¿Ú£¨ÊµÏÖdestroy()·½·¨£©
¶ÔÓÚprototype×÷ÓÃÓòµÄBean£¬SpringÈÝÆ÷Ö»¸ºÔðBeanµÄ´´½¨£¬µ±ÈÝÆ÷´´½¨ÊµÀýÍê³Éºó£¬Bean½«ÍêÈ«½»¸ø¿Í»§¶Ë´úÂë¹ÜÀí£¬ÈÝÆ÷²»ÔÙ¸ºÔðÆäÉúÃüÖÜÆÚ£¬SpringÈÝÆ÷±¾ÉíÒ²²»ÖªµÀ×Ô¼º´´½¨Á˶àÉÙ¸öʵÀý£¬¸üÎÞ´ÓÖªµÀÕâЩʵÀýʲôʱºò²Å»á±»Ïú»Ù¡£
5. Bean±êÇ©ÊôÐÔ¡¡¡¡
¢Ù idÊôÐÔ£ºBeanµÄÃû³ÆÔÚIOCÈÝÆ÷ÖбØÐëÊÇΨһµÄ¡£
¢Ú classÊôÐÔ£ºÖ¸¶¨Bean¶ÔӦʵÏÖÀàµÄÈ«ÀàÃû£¬¼´°üÃû¼ÓÀàÃû£¬±ØÐëÓÐÎ޲ι¹Ôì¡£
¢Û scopeÊôÐÔ: Ç°ÃæÌáµ½¹ýµÄ×÷ÓÃÓòÊôÐÔ£¬²»Ö¸¶¨Ä¬ÈÏΪsingleton£¬¼´µ¥ÊµÀýģʽ¡£
¢Ü nameÊôÐÔ£ºÉèÖÃ<bean>±êÇ©µÄ±ðÃû£¬¶à¸ö±ðÃûÖ®¼äÓöººÅ»ò¿Õ¸ñ·Ö¿ª¡£
¢Ý parentÊôÐÔ£º×ÓÀàBean¶¨ÒåËüËùÒýÓÃËüµÄ¸¸ÀàBean¡£×ÓÀàBean¶¨ÒåËüËùÒýÓÃËüµÄ¸¸ÀàBean¡£ÕâÊ±Ç°ÃæµÄclassÊôÐÔʧЧ¡£×ÓÀàBean»á¼Ì³Ð¸¸ÀàBeanµÄËùÓÐÊôÐÔ£¬×ÓÀàBeanÒ²¿ÉÒÔ¸²¸Ç¸¸ÀàBeanµÄÊôÐÔ¡£×¢Ò⣺×ÓÀàBeanºÍ¸¸ÀàBeanÊÇͬһ¸öJavaÀà¡£
¢Þ abstractÊôÐÔ£ºÓÃÀ´¶¨ÒåBeanÊÇ·ñΪ³éÏóBean¡£Ëü±íʾÕâ¸öBean½«²»»á±»ÊµÀý»¯£¬Ò»°ãÓÃÓÚ¸¸ÀàBean£¬ÒòΪ¸¸ÀàBeanÖ÷ÒªÊǹ©×ÓÀàBean¼Ì³ÐʹÓá£
¢ß singletonÊôÐÔ£º×÷ÓÃͬ¢Û£¬Ä¬ÈÏΪtrue
¢à lazy-initÊôÐÔ£ºÓÃÀ´¶¨ÒåÕâ¸öBeanÊÇ·ñʵÏÖÀÁ³õʼ»¯¡£Èç¹ûΪ¡°true¡±£¬Ëü½«ÔÚBeanFactoryÆô¶¯Ê±³õʼ»¯ËùÓеÄSingletonBean¡£·´Ö®£¬Èç¹ûΪ¡°false¡±,ËüÖ»ÔÚBeanÇëÇóʱ²Å¿ªÊ¼´´½¨SingletonBean¡£
¢á autowireÊôÐÔ£ºËü¶¨ÒåÁËBeanµÄ×Ô¶¯×°ÔØ·½Ê½¡£¡°no¡±:²»Ê¹ÓÃ×Ô¶¯×°Å书ÄÜ¡£¡°byName¡±:ͨ¹ýBeanµÄÊôÐÔÃûʵÏÖ×Ô¶¯×°Åä¡£¡°byType¡±:ͨ¹ýBeanµÄÀàÐÍʵÏÖ×Ô¶¯×°Åä¡£¡°constructor¡±:ÀàËÆÓÚbyType£¬µ«ËüÊÇÓÃÓÚ¹¹Ô캯ÊýµÄ²ÎÊýµÄ×Ô¶¯×é×°¡£¡°autodetect¡±:ͨ¹ýBeanÀàµÄ·´Ê¡»úÖÆ£¨introspection£©¾ö¶¨ÊÇʹÓá°constructor¡±
¢â dependency-checkÊôÐÔ£ºËüÓÃÀ´È·±£Bean×é¼þͨ¹ýJavaBeanÃèÊöµÄËùÒÔÒÀÀµ¹ØÏµ¶¼µÃµ½Âú×ã¡£ÔÚÓë×Ô¶¯×°Å书ÄÜÒ»ÆðʹÓÃʱ£¬ËüÌØ±ðÓÐÓá£none£º²»½øÐÐÒÀÀµ¼ì²éobjects£ºÖ»×ö¶ÔÏó¼äÒÀÀµµÄ¼ì²é¡£simple£ºÖ»×öÔʼÀàÐͺÍStringÀàÐÍÒÀÀµµÄ¼ì²é¡£all£º¶ÔËùÓÐÀàÐ͵ÄÒÀÀµ½øÐмì²é¡£Ëü°üÀ¨ÁËÇ°ÃæµÄobjectsºÍsimple¡£
depends-onÊôÐÔ£ºÕâ¸öBeanÔÚ³õʼ»¯Ê±ÒÀÀµµÄ¶ÔÏó£¬Õâ¸ö¶ÔÏó»áÔÚÕâ¸öBean³õʼ»¯Ö®Ç°´´½¨¡£
init-methodÊôÐÔ£ºÓÃÀ´¶¨ÒåBeanµÄ³õʼ»¯·½·¨£¬Ëü»áÔÚBean×é×°Ö®ºóµ÷Óá£Ëü±ØÐëÊÇÒ»¸öÎÞ²ÎÊýµÄ·½·¨¡£
destroy-methodÊôÐÔ£ºÓÃÀ´¶¨ÒåBeanµÄÏú»Ù·½·¨£¬ËüÔÚBeanFactory¹Ø±Õʱµ÷Óá£Í¬Ñù£¬ËüÒ²±ØÐëÊÇÒ»¸öÎÞ²ÎÊýµÄ·½·¨¡£ËüÖ»ÄÜÓ¦ÓÃÓÚsingletonBean¡£
factory-methodÊôÐÔ£º¶¨Òå´´½¨¸ÃBean¶ÔÏóµÄ¹¤³§·½·¨¡£ËüÓÃÓÚÏÂÃæµÄ¡°factory-bean¡±£¬±íʾÕâ¸öBeanÊÇͨ¹ý¹¤³§·½·¨´´½¨¡£´Ëʱ£¬¡°class¡±ÊôÐÔʧЧ¡£
factory-beanÊôÐÔ£º¶¨Òå´´½¨¸ÃBean¶ÔÏóµÄ¹¤³§Àà¡£Èç¹ûʹÓÃÁË¡°factory-bean¡±Ôò¡°class¡±ÊôÐÔʧЧ¡£
Èý. springÖÐbeanÅäÖÃ
beanÅäÖÃÓÐÈýÖÖ·½·¨£º
1¡¢ÅäÖÃÐÎʽ£º
¢Ù»ùÓÚxmlÎļþ ¢Ú»ùÓÚ×¢½â ¢Û»ùÓÚjavaÀà
2¡¢ÅäÖ÷½Ê½£º
¢Ùͨ¹ýÈ«ÀàÃû(·´Éä)
¢Úͨ¹ý¹¤³§·½·¨(¾²Ì¬¹¤³§·½·¨¡¢ÊµÀý¹¤³§·½·¨)
¢ÛFactoryBean
3¡¢ÒÀÀµ×¢È뷽ʽ£º
¢ÙÊôÐÔ×¢Èë ¢Ú¹¹ÔìÆ÷×¢Èë
1. »ùÓÚxml È«ÀàÃû ÊôÐÔ×¢Èë
<bean id="helloWorld"
class="top.arioso.spring.beans.HelloWorld">
<property name="id">
<value>123456</value>
</property>
<property name="age" value="18"></property>
</bean>
property½Úµã£ºÎªBeanÊôÐÔ¸³Öµ£¬nameΪÊôÐÔÃû£¬value¶ÔÓ¦ÊôÐÔÖµ£¬
ÊôÐÔÖµÒªÓÐsetter·½·¨
valueÊôÐÔ¿ÉÓÃ×Ó½ÚµãvalueÌæ´ú |
2. »ùÓÚxml È«ÀàÃû ¹¹Ôì×¢Èë
<bean id="person"
class="top.arioso.spring.beans.Person">
<constructor-arg type="java.lang.String">
<value>John</value> </constructor-arg>
<constructor-arg value="America"
index="3"><constructor>
<constructor-arg value="123456" type="int"><constructor>
<constructor-arg value="man" typ><constructor>
<property name="id"> <value>123456</value>
</property> <property name="age"
value="18"></property>
</bean>
ÒªÇó±ØÐëÓдø²Î¹¹Ôì
¸ù¾ÝvalueֵƥÅä¹¹ÔìÆ÷£¬Æ¥Åä²»µ½¾ÍÆ¥ÅäÏÂÒ»¸ö
¿ÉÒÔÓÃindexÊôÐÔÖ¸¶¨´ø²Î¹¹ÔìÆ÷µÚ¼¸¸ö²ÎÊý
¿ÉÒÔÓÃtypeÊôÐÔÖ¸¶¨¹¹Ô캯Êý²ÎÊýÀàÐÍµÄÆ¥Åä
valueÊôÐÔ¿ÉÓÃ×Ó½ÚµãvalueÌæ´ú |
3. »ùÓÚxml ͨ¹ý¹¤³§ÅäÖÃ
(1) ¾²Ì¬¹¤³§·½·¨ÅäÖÃ
<bean
id="car" class="top.arioso.spring.factory.staticCarFactory"
factory-method="getCar"> <constructor-arg
value="BMW"></constructor-arg>
</bean>
class£º¹¤³§·½·¨È«ÀàÃû
factory-method£ºÒªµ÷Óù¤³§·½·¨Ãû
ÈôÐèÒª´«µÝ²ÎÊý£¬Ê¹ÓÃconstructor-arg´«Öµ |
(2)ʵÀý¹¤³§·½·¨ÅäÖÃ
<bean id="carFactory"
class="top.arioso.spring.beans.carFactory"></bean>
<bean id="car" factory-bean="carFactory"
factory-method= "getCar"> <constructor-arg
value="BMW"></constructor-arg>
</bean>
carFactory£º¹¤³§µÄʵÀý
factory-bean: Ö¸Ïò¹¤³§µÄʵÀý
factory-method£ºÒªµ÷Óù¤³§·½·¨Ãû
ÈôÐèÒª´«µÝ²ÎÊý£¬Ê¹ÓÃconstructor-arg´«Öµ |
(3)ͨ¹ýFactoryBeanÅäÖÃ
spring¿ò¼Ü×ÔÉíÌṩµÄ£¬ËüÐèҪʵÏÖFactoryBean½Ó¿Ú£¬ÊµÏÖ´úÂë¾Í±ØÐëдÔÚgetObject()·½·¨ÖС£
//java´úÂë
public class SpringFactory implements FactoryBean <Calendar>{
public SpringFactory() {
System.out.println("ÎÒÊÇÒ»¸öspring¹¤³§Àà");
}
public Calendar getObject() throws Exception
{
return Calendar.getInstance();
}
public Class<?> getObjectType() {
return Calendar.class;
}
public boolean isSingleton() {
return false;
} //ÅäÖÃÎļþ
<bean id="cal" class="springfactory.SpringFactory"/>
¸ÃÅäÖ÷µ»ØµÄʵÀýÊÇSpringFactoryµÄgetObject·½·¨·µ»ØµÄʵÀý¡£ |
4. springÅäÖÃBean×¢Èë
¢Ù ÅäÖÃ×ÖÃæÖµ
¿Éͨ¹ývalueÊôÐÔ»ò<value>±êÇ©ÊôÐÔ×¢È룬
Èô×ÖÃæÖµ°üº¬ÌØÊâ×Ö·û£¬Ê¹ÓÃ<![CDATA[]]>°ü¹ü
spring½«ÊôÐԵĿղÎÊýµ±¿ÕString,ÏÂÃæ¸øemailÊôÐÔÉèÖÃÁ˿յÄStringÖµ("")
<bean id="nullBean"
class="top.arioso.spring.NullBean">
<property name="email" value=""
/> </bean>
Èç¹ûҪעÈënullÖµ,¿ÉÒÔʹÓÃ<null /> <bean
id="exampleBean" class="top.arioso.spring.NullBean">
<property name="email"> <null
/> </property> </bean> |
¢Ú BeanÖ®¼äµÄÒýÓÃ
<bean id="dog"
class="top.arioso.hello.Dog"/>
<bean id="user" class="top.arioso.hello.User">
<property name="name" value="tony"/>
<property name="dog" ref="dog"></property>
</bean> |
¢Û ListÊôÐÔ£¨setͬÀí£©
<bean id="user"
class="top.arioso.hello.User">
<property name="list"> <list>
<value>±±¾©</value> <value>ÉϺ£</value>
<value>¹ãÖÝ</value> <ref bean="dog"/>
</list> </property> </bean> |
¢Ü mapÊôÐÔ
<bean id="user"
class="top.arioso.hello.User">
<property name="map"> <map>
<entry key="bj" value="±±¾©"/>
<entry key="sh" value="ÉϺ£"/>
</map> </property> </bean> |
¢Ý PropertiesÊôÐÔ
<bean id="user"
class="top.arioso.hello.User">
<property name="dbParams">
<props> <prop key="username">root</prop>
<prop key="password">root</prop>
</props> </property> </bean> |
¢Þ ¶ÀÁ¢µÄ¼¯ºÏBean
<util:list
id="computerList"> <ref bean="computer"/>
<bean class="top.arioso.spring.collection.ComputerList">
<constructor-arg value="hp"></constructor-arg>
<constructor-arg value="dell"></constructor-arg>
<constructor-arg value="acer"></constructor-arg>
</bean> </util:list> <bean
id="User" class="top.arioso.spring.User">
<property name="id" value="2018310"></property>
<property name="name" value="Tom"></property>
<property name="computers" value="computerList"></property>
</bean> |
¢ß ʹÓÃpÃüÃû¿Õ¼ä
<bean id="computer"
class="top.arioso.spring.Computer">
<p:brand="dell" p-cpu="i7-7700"
p-price="7900"> </bean>
Ê×ÏÈÐèÒªµ¼ÈëÃüÃû¿Õ¼ä |
Ê×ÏÈÐèÒªµ¼ÈëÃüÃû¿Õ¼ä
5. »ùÓÚ×¢½âÅäÖÃBean
¢Ù ×¢½âÒÀÀµaop°ü£¬Òªµ¼Èëaop°ü¡£
¢Ú Spring Äܹ»´Ó classpath ÏÂ×Ô¶¯É¨Ãè(ÐèÒªÅäÖà context:component-scan
)¾ßÓÐÌØ¶¨×¢½âµÄ×é¼þ¡£
ÌØ¶¨µÄ×é¼þ°üÀ¨£º
@Component£º»ù±¾×¢½â£¬±êʶһ¸öÊÜSpring¹ÜÀíµÄ×é¼þ¡£
@Repository£º±êʶ³Ö¾Ã²ã×é¼þ¡£
@Service£º±êʶҵÎñ²ã×é¼þ¡£
@Controller£º±êʶ¿ØÖƲã×é¼þ¡£
Spring ¶ÔɨÃèµ½µÄ×é¼þÓÐĬÈϵÄÃüÃû¹æÔò£ºÊ¹Ó÷ÇÏÞ¶¨ÀàÃû£¬µÚÒ»¸ö×ÖĸСд (Ò²¿ÉÒÔʹÓÃvalueÊôÐÔÖ¸¶¨×é¼þµÄÃû³Æ)¡£
¢Û ÅäÖÃ<context:component-scan>
<context:component-scan
base-package="top.arioso.spring.annotation"
resource-pattern="service/*.class">
</context:component-scan>
base-package ÊôÐÔÖ¸¶¨SpringɨÃèµÄ°ü£¬Spring½«É¨Ãè ¸Ã°ü¼°ÆäËùÓÐ×Ó°ü£¬ÈçÓжà¸ö°ü£¬Ê¹ÓöººÅ¸ô¿ª¡£
¿ÉÒÔʹÓà resource-pattern À´¹ýÂËÌØ¶¨µÄÀà¡£ <context:exclude-filter>:Ö¸¶¨É¨ÃèÅųýÄÄЩÀà
ÐèÉèÖÃuse-default-filterΪfalse
//ֻɨÃèÓÐService×¢½âµÄÀà <context:component-scan
resource-pattern="controller/*.class"
base-package="top.arioso.spring.annotation"
use-default-filters="false">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Service">
</context:component-scan>
//ÅųýɨÃèʵÏÖÁËUserRepositoryµÄÀà <context:component-scan
resource-pattern="controller/*.class"
base-package="top.arioso.spring.annotation"
use-default-filters="false">
<context:exclude-filter type="assignable"
expression="top.arioso.repository.UserRepository">
</context:component-scan>
<context:include-filter>:Ö¸¶¨É¨Ãè°üº¬ÄÄЩÀà
//ÅųýɨÃèÓÐService×¢½âµÄÀà <context:component-scan
resource-pattern="controller/*.class"
base-package="top.arioso.spring.annotation"
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Service">
</context:component-scan>
//ֻɨÃèʵÏÖÁËUserRepositoryµÄÀà <context:component-scan
resource-pattern="controller/*.class"
base-package="top.arioso.spring.annotation"
<context:include-filter type="assignable"
expression="top.arioso.repository.UserRepository">
</context:component-scan> |
6. ʹÓÃ×¢½â×Ô¶¯×°ÅäBean
¢ÙAutowired×Ô¶¯×¢Èë
@Autowired¿ÉÒÔÔÚ×ֶΡ¢setter·½·¨¡¢¹¹ÔìÆ÷ÉÏÃæÊ¹ÓÃ
ĬÈÏÇé¿öÏÂ,µ±Ê¹Óà @Autowired ×¢½âµÄÊôÐÔ£¬Èç¹ûÔÚIOCÈÝÆ÷ÖÐÕÒ²»µ½Æ¥ÅäµÄBeanÀ´×°ÅäÊôÐÔʱ£¬»áÅ׳öÒì³£¡£¿ÉÒÔʹÓÃrequired=false
ÉèÖÃijһÊôÐÔ²»±»ÉèÖÃ(¼´IOCÈÝÆ÷²»ÅäÖÃÆ¥ÅäµÄBean)¡£
ʹÓÃ@Autowired×¢½âµÄÊôÐÔ£¬µ± IOC ÈÝÆ÷ÖдæÔÚ¶à¸öÀàÐÍÆ¥ÅäµÄ
Bean ʱ£¬Ä¬ÈÏÇé¿öÏÂ»áÆ¥ÅäÓëÊôÐÔÏàͬÃû³ÆµÄ Bean£¬ÈôÆ¥Åä²»µ½ÔòÅ׳öÒì³£¡£Ò²¿ÉÒÔʹÓà @Qualifier(¡°BeanÃû³Æ¡±)
×¢½âÖ¸¶¨×¢ÈëµÄBean¡£
@AutowiredÒ²¿ÉÒÔÓÃÔÚÊý×éÉÏ£¬Spring»á½«ËùÓÐÆ¥ÅäµÄBean×Ô¶¯×°Åä½øÊý×é¡£
@AutowiredÒ²¿ÉÒÔÓÃÔÚ¼¯ºÏÉÏ£¬Spring»áÅжϸü¯ºÏµÄÀàÐÍ,È»ºó×Ô¶¯×°ÅäËùÓÐÀàÐͼæÈݵÄBean¡£
@AutowiredÒ²¿ÉÒÔÓÃÔÚMapÉÏ£¬ÈôkeyΪStringÀàÐÍ£¬Spring½«BeanµÄÃû³Æ×÷Ϊkey£¬Bean±¾Éí×÷Ϊֵ×Ô¶¯×°ÅäËùÓÐÀàÐͼæÈݵĵÄBean¡£
Ò²¿ÉÒÔʹÓà @Resource »ò @Inject ×Ô¶¯×°ÅäBean£¬¹¦ÄÜÓë
@Autowired ÀàËÆ£¬Ò»°ãʹÓÃ@ResourceºÍ@Autowired£¬²»ÍƼö@Inject¡£
¢ÚResource×Ô¶¯×°Åä¡¡¡¡
@ResourceÓë@Autowired×÷ÓÃÀàËÆ£¬Ö»²»¹ý@Autowired°´ByType×Ô¶¯×¢È룬Resource°´ByName×Ô¶¯×¢È룻
@Resource×°Åä˳Ðò
Èç¹ûͬʱָ¶¨ÁËnameºÍtype£¬Ôò´ÓSpringÉÏÏÂÎÄÖÐÕÒµ½Î¨Ò»Æ¥ÅäµÄbean½øÐÐ×°Å䣬ÕÒ²»µ½ÔòÅ׳öÒì³£
Èç¹ûÖ¸¶¨ÁËname£¬Ôò´ÓÉÏÏÂÎÄÖвéÕÒÃû³Æ£¨id£©Æ¥ÅäµÄbean½øÐÐ×°Å䣬ÕÒ²»µ½ÔòÅ׳öÒì³£
Èç¹ûÖ¸¶¨ÁËtype£¬Ôò´ÓÉÏÏÂÎÄÖÐÕÒµ½ÀàÐÍÆ¥ÅäµÄΨһbean½øÐÐ×°Å䣬ÕÒ²»µ½»òÕßÕÒµ½¶à¸ö£¬¶¼»áÅ׳öÒì³£
Èç¹û¼ÈûÓÐÖ¸¶¨name£¬ÓÖûÓÐÖ¸¶¨type£¬Ôò×Ô¶¯°´ÕÕbyName·½Ê½½øÐÐ×°Å䣻Èç¹ûûÓÐÆ¥Å䣬Ôò»ØÍËΪһ¸öÔʼÀàÐͽøÐÐÆ¥Å䣬Èç¹ûÆ¥ÅäÔò×Ô¶¯×°Åä¡£
¢Û@Qualifier×¢½â
QualifierÒëΪºÏ¸ñÕߣ¬Ò»°ãÓëAutowiredÅäºÏʹÓ㬵±Óжà¸öÀàʵÏÖÒ»¸ö½è¿Ú£¬spring²»ÖªµÀ°ó¶¨ÄĸöʵÏÖÀ࣬¿ÉÒÔÓÃQualifier(BeanÃû³Æ»ò×¢½âÃû)
ÅäºÏ@AutowiredʹÓÃ
¢Ü@AutowiredÓë@ResourceµÄÇø±ð
@ResourceÊÇËùÊôÓÚJ2EEµÄ£¬¶ø@AutowiredÊÇËùÊôÓÚSpringµÄ£»
@AutowiredÊÇĬÈϰ´ÀàÐÍ(ByType)×°ÅäµÄ,ĬÈÏÒªÒÀÀµµÄ¶ÔÏó±ØÐë´æÔÚ£¬·ñÔòÅ׳öÒì³££¬Èç¹ûÔÊÐíΪnullÖµ£¬¿ÉÒÔÉèÖÃ@Autowired(required=false)£¬@ResourceÊÇĬÈϰ´Ãû³Æ(ByName)×°ÅäµÄ£¬Èç¹û²»Ö¸¶¨name£¬Ôò°Ñ×Ö¶ÎÃûµ±×öÃû³ÆÑ°ÕÒ£¬ÕÒ²»µ½Óë¸ÃÃû³ÆÆ¥ÅäµÄBeanʱ²Å»á°´ÀàÐÍѰÕÒ¡£µ«ÊÇÒ»µ©Ö¸¶¨name£¬¾Í»á°´Ãû³ÆÑ°ÕÒ£¬ÕÒ²»µ½Å׳öÒì³£¡£ |