developerWorks ä¸å½
ææ¯ä¸»é¢
Java technology
ææ¡£åº
Spring æ¡æ¶ç设计ç念ä¸è®¾è®¡æ¨¡å¼åæ
Spring ä½ä¸ºç°å¨æä¼ç§çæ¡æ¶ä¹ä¸ï¼å·²è¢«å¹¿æ³ç使ç¨ï¼å¹¶ä¸æå¾å¤å¯¹å
¶åæçæç« ãæ¬æå°ä»å¦å¤ä¸ä¸ªè§è§è¯å¾åæåº Spring æ¡æ¶çä½è
设计 Spring æ¡æ¶ç骨骼æ¶æç设计ç念ï¼æé£å ä¸ªæ ¸å¿ç»ä»¶ï¼ä¸ºä»ä¹éè¦è¿äºç»ä»¶ï¼å®ä»¬åæ¯å¦ä½ç»åå¨ä¸èµ·ææ Spring ç骨骼æ¶æï¼ Spring ç AOP ç¹æ§åæ¯å¦ä½å©ç¨è¿äºåºç¡ç骨骼æ¶ææ¥å·¥ä½çï¼ Spring ä¸å使ç¨äºé£äºè®¾è®¡æ¨¡å¼æ¥å®æå®çè¿ç§è®¾è®¡çï¼å®çè¿ç§è®¾è®¡ç念对对æ们以åç软件设计æä½å¯ç¤ºï¼æ¬æå°è¯¦ç»è§£çè¿äºé®é¢ã
20 è¯è®ºï¼
许 令波, Java å¼åå·¥ç¨å¸, æ·å®ç½
2010 å¹´ 6 æ 10 æ¥
å
容
å¨ IBM Bluemix äºå¹³å°ä¸å¼å并é¨ç½²æ¨çä¸ä¸ä¸ªåºç¨ã
ç°å¨å°±å¼å§å
è´¹è¯ç¨
Spring ç骨骼æ¶æ
Spring æ»å
±æåå 个ç»ä»¶ï¼ä½æ¯çæ£æ ¸å¿çç»ä»¶åªæå 个ï¼ä¸é¢æ¯ Spring æ¡æ¶çæ»ä½æ¶æå¾ï¼
å¾ 1 .Spring æ¡æ¶çæ»ä½æ¶æå¾
ä»ä¸å¾ä¸å¯ä»¥çåº Spring æ¡æ¶ä¸çæ ¸å¿ç»ä»¶åªæä¸ä¸ªï¼CoreãContext å Beansãå®ä»¬æ建起äºæ´ä¸ª Spring ç骨骼æ¶æã没æå®ä»¬å°±ä¸å¯è½æ AOPãWeb çä¸å±çç¹æ§åè½ãä¸é¢ä¹å°ä¸»è¦ä»è¿ä¸ä¸ªç»ä»¶å
¥æåæ Springã
Spring ç设计ç念
åé¢ä»ç»äº Spring çä¸ä¸ªæ ¸å¿ç»ä»¶ï¼å¦æåå¨å®ä»¬ä¸ä¸ªä¸éåºæ ¸å¿çè¯ï¼é£å°±é Beans ç»ä»¶è«å±äºï¼ä¸ºä½è¿æ ·è¯´ï¼å
¶å® Spring å°±æ¯é¢å Bean çç¼ç¨ï¼BOP,Bean Oriented Programmingï¼ï¼Bean å¨ Spring ä¸ææ¯çæ£ç主è§ã
Bean å¨ Spring ä¸ä½ç¨å°±å Object 对 OOP çæä¹ä¸æ ·ï¼æ²¡æ对象çæ¦å¿µå°±å没æé¢å对象ç¼ç¨ï¼Spring ä¸æ²¡æ Bean ä¹å°±æ²¡æ Spring åå¨çæä¹ãå°±åä¸æ¬¡æ¼åºèå°é½åå¤å¥½äºä½æ¯å´æ²¡ææ¼åä¸æ ·ã为ä»ä¹è¦ Bean è¿ç§è§è² Bean æè
为ä½å¨ Spring å¦æ¤éè¦ï¼è¿ç± Spring æ¡æ¶ç设计ç®æ å³å®ï¼Spring 为ä½å¦æ¤æµè¡ï¼æä»¬ç¨ Spring çåå æ¯ä»ä¹ï¼æ³æ³ä½ ä¼åç°åæ¥ Spring 解å³äºä¸ä¸ªé常å
³é®çé®é¢ä»å¯ä»¥è®©ä½ æ对象ä¹é´çä¾èµå
³ç³»è½¬èç¨é
ç½®æ件æ¥ç®¡çï¼ä¹å°±æ¯ä»çä¾èµæ³¨å
¥æºå¶ãèè¿ä¸ªæ³¨å
¥å
³ç³»å¨ä¸ä¸ªå« Ioc 容å¨ä¸ç®¡çï¼é£ Ioc 容å¨ä¸æåæ¯ä»ä¹å°±æ¯è¢« Bean å
裹ç对象ãSpring æ£æ¯éè¿æ对象å
è£
å¨ Bean ä¸èè¾¾å°å¯¹è¿äºå¯¹è±¡ç®¡ç以åä¸äºåé¢å¤æä½çç®çã
å®è¿ç§è®¾è®¡çç¥å®å
¨ç±»ä¼¼äº Java å®ç° OOP ç设计ç念ï¼å½ç¶äº Java æ¬èº«ç设计è¦æ¯ Spring å¤æ太å¤å¤ªå¤ï¼ä½æ¯é½æ¯æ建ä¸ä¸ªæ°æ®ç»æï¼ç¶åæ ¹æ®è¿ä¸ªæ°æ®ç»æ设计ä»ççåç¯å¢ï¼å¹¶è®©å®å¨è¿ä¸ªç¯å¢ä¸æç
§ä¸å®çè§å¾å¨ä¸åçè¿å¨ï¼å¨å®ä»¬çä¸åè¿å¨ä¸è®¾è®¡ä¸ç³»åä¸ç¯å¢æè
ä¸å
¶ä»ä¸ªä½å®æä¿¡æ¯äº¤æ¢ãè¿æ ·æ³æ¥åè¿å¤´æ³æ³æ们ç¨å°çå
¶ä»æ¡æ¶é½æ¯å¤§æ
¨ç±»ä¼¼ç设计ç念ã
æ ¸å¿ç»ä»¶å¦ä½ååå·¥ä½
åé¢è¯´ Bean æ¯ Spring ä¸å
³é®å ç´ ï¼é£ Context å Core åæä½ä½ç¨å¢ï¼åé¢å§ Bean æ¯ä½ä¸åºæ¼åºä¸çæ¼åçè¯ï¼é£ Context å°±æ¯è¿åºæ¼åºçèå°èæ¯ï¼è Core åºè¯¥å°±æ¯æ¼åºçéå
·äºãåªæä»ä»¬å¨ä¸èµ·æè½å
·å¤è½æ¼åºä¸åºå¥½æçæåºæ¬çæ¡ä»¶ãå½ç¶ææåºæ¬çæ¡ä»¶è¿ä¸è½ä½¿è¿åºæ¼åºè±é¢èåºï¼è¿è¦ä»è¡¨æ¼çèç®è¶³å¤ç精彩ï¼è¿äºèç®å°±æ¯ Spring è½æä¾çç¹è²åè½äºã
æ们ç¥é Bean å
è£
çæ¯ Objectï¼è Object å¿
ç¶ææ°æ®ï¼å¦ä½ç»è¿äºæ°æ®æä¾çåç¯å¢å°±æ¯ Context è¦è§£å³çé®é¢ï¼å¯¹ Context æ¥è¯´ä»å°±æ¯è¦åç°æ¯ä¸ª Bean ä¹é´çå
³ç³»ï¼ä¸ºå®ä»¬å»ºç«è¿ç§å
³ç³»å¹¶ä¸è¦ç»´æ¤å¥½è¿ç§å
³ç³»ãæ以 Context å°±æ¯ä¸ä¸ª Bean å
³ç³»çéåï¼è¿ä¸ªå
³ç³»éååå« Ioc 容å¨ï¼ä¸æ¦å»ºç«èµ·è¿ä¸ª Ioc 容å¨å Spring å°±å¯ä»¥ä¸ºä½ å·¥ä½äºãé£ Core ç»ä»¶åæä»ä¹ç¨æ¦ä¹å°å¢ï¼å
¶å® Core å°±æ¯åç°ã建ç«åç»´æ¤æ¯ä¸ª Bean ä¹é´çå
³ç³»æéè¦çä¸äºåçå·¥å
·ï¼ä»è¿ä¸ªè§åº¦çæ¥ï¼Core è¿ä¸ªç»ä»¶å« Util æ´è½è®©ä½ ç解ã
å®ä»¬ä¹é´å¯ä»¥ç¨ä¸å¾æ¥è¡¨ç¤ºï¼
å¾ 2. ä¸ä¸ªç»ä»¶å
³ç³»
æ ¸å¿ç»ä»¶è¯¦è§£
è¿éå°è¯¦ç»ä»ç»æ¯ä¸ªç»ä»¶å
é¨ç±»çå±æ¬¡å
³ç³»ï¼ä»¥åå®ä»¬å¨è¿è¡æ¶çæ¶åºé¡ºåºãæ们å¨ä½¿ç¨ Spring æ¯åºè¯¥æ³¨æçå°æ¹ã
Bean ç»ä»¶
åé¢å·²ç»è¯´æäº Bean ç»ä»¶å¯¹ Spring çéè¦æ§ï¼ä¸é¢çç Bean è¿ä¸ªç»ä»¶å¼æä¹è®¾è®¡çãBean ç»ä»¶å¨ Spring ç org.springframework.beans å
ä¸ãè¿ä¸ªå
ä¸çææ类主è¦è§£å³äºä¸ä»¶äºï¼Bean çå®ä¹ãBean çå建以å对 Bean ç解æã对 Spring ç使ç¨è
æ¥è¯´å¯ä¸éè¦å
³å¿çå°±æ¯ Bean çå建ï¼å
¶ä»ä¸¤ä¸ªç± Spring å¨å
é¨å¸®ä½ å®æäºï¼å¯¹ä½ æ¥è¯´æ¯éæçã
Spring Bean çå建æ¶å
¸åçå·¥å模å¼ï¼ä»ç顶级æ¥å£æ¯ BeanFactoryï¼ä¸å¾æ¯è¿ä¸ªå·¥åç继æ¿å±æ¬¡å
³ç³»ï¼
å¾ 4. Bean å·¥åç继æ¿å
³ç³»
BeanFactory æä¸ä¸ªåç±»ï¼ListableBeanFactoryãHierarchicalBeanFactory å AutowireCapableBeanFactoryãä½æ¯ä»ä¸å¾ä¸æ们å¯ä»¥åç°æç»çé»è®¤å®ç°ç±»æ¯ DefaultListableBeanFactoryï¼ä»å®ç°äºææçæ¥å£ãé£ä¸ºä½è¦å®ä¹è¿ä¹å¤å±æ¬¡çæ¥å£å¢ï¼æ¥é
è¿äºæ¥å£çæºç å说æåç°ï¼æ¯ä¸ªæ¥å£é½æä»ä½¿ç¨çåºåï¼å®ä¸»è¦æ¯ä¸ºäºåºåå¨ Spring å
é¨å¨æä½è¿ç¨ä¸å¯¹è±¡çä¼ éå转åè¿ç¨ä¸ï¼å¯¹å¯¹è±¡çæ°æ®è®¿é®æåçéå¶ãä¾å¦ ListableBeanFactory æ¥å£è¡¨ç¤ºè¿äº Bean æ¯å¯å表çï¼è HierarchicalBeanFactory 表示çæ¯è¿äº Bean æ¯æ继æ¿å
³ç³»çï¼ä¹å°±æ¯æ¯ä¸ª Bean æå¯è½æç¶ BeanãAutowireCapableBeanFactory æ¥å£å®ä¹ Bean çèªå¨è£
é
è§åãè¿å个æ¥å£å
±åå®ä¹äº Bean çéåãBean ä¹é´çå
³ç³»ã以å Bean è¡ä¸ºã
Bean çå®ä¹ä¸»è¦æ BeanDefinition æè¿°ï¼å¦ä¸å¾è¯´æäºè¿äºç±»çå±æ¬¡å
³ç³»ï¼
å¾ 5. Bean å®ä¹çç±»å±æ¬¡å
³ç³»å¾
Bean çå®ä¹å°±æ¯å®æ´çæè¿°äºå¨ Spring çé
ç½®æ件ä¸ä½ å®ä¹ç <bean/> èç¹ä¸ææçä¿¡æ¯ï¼å
æ¬åç§åèç¹ãå½ Spring æå解æä½ å®ä¹çä¸ä¸ª <bean/> èç¹åï¼å¨ Spring çå
é¨ä»å°±è¢«è½¬åæ BeanDefinition 对象ã以åææçæä½é½æ¯å¯¹è¿ä¸ªå¯¹è±¡å®æçã
Bean ç解æè¿ç¨é常å¤æï¼åè½è¢«åçå¾ç»ï¼å 为è¿ééè¦è¢«æ©å±çå°æ¹å¾å¤ï¼å¿
é¡»ä¿è¯æ足å¤ççµæ´»æ§ï¼ä»¥åºå¯¹å¯è½çååãBean ç解æ主è¦å°±æ¯å¯¹ Spring é
ç½®æ件ç解æãè¿ä¸ªè§£æè¿ç¨ä¸»è¦éè¿ä¸å¾ä¸çç±»å®æï¼
å¾ 6. Bean ç解æç±»
å½ç¶è¿æå
·ä½å¯¹ tag ç解æè¿é并没æååºã
Context ç»ä»¶
Context å¨ Spring ç org.springframework.context å
ä¸ï¼åé¢å·²ç»è®²è§£äº Context ç»ä»¶å¨ Spring ä¸çä½ç¨ï¼ä»å®é
ä¸å°±æ¯ç» Spring æä¾ä¸ä¸ªè¿è¡æ¶çç¯å¢ï¼ç¨ä»¥ä¿åå个对象çç¶æãä¸é¢çä¸ä¸è¿ä¸ªç¯å¢æ¯å¦ä½æ建çã
ApplicationContext æ¯ Context ç顶级ç¶ç±»ï¼ä»é¤äºè½æ è¯ä¸ä¸ªåºç¨ç¯å¢çåºæ¬ä¿¡æ¯å¤ï¼ä»è¿ç»§æ¿äºäºä¸ªæ¥å£ï¼è¿äºä¸ªæ¥å£ä¸»è¦æ¯æ©å±äº Context çåè½ãä¸é¢æ¯ Context çç±»ç»æå¾ï¼
å¾ 7. Context ç¸å
³çç±»ç»æå¾
ï¼æ¥ç å¾ 7 çæ¸
æ°çæ¬ãï¼
ä»ä¸å¾ä¸å¯ä»¥çåº ApplicationContext 继æ¿äº BeanFactoryï¼è¿ä¹è¯´æäº Spring 容å¨ä¸è¿è¡ç主ä½å¯¹è±¡æ¯ Beanï¼å¦å¤ ApplicationContext 继æ¿äº ResourceLoader æ¥å£ï¼ä½¿å¾ ApplicationContext å¯ä»¥è®¿é®å°ä»»ä½å¤é¨èµæºï¼è¿å°å¨ Core ä¸è¯¦ç»è¯´æã
ApplicationContext çå类主è¦å
å«ä¸¤ä¸ªæ¹é¢ï¼
ConfigurableApplicationContext 表示该 Context æ¯å¯ä¿®æ¹çï¼ä¹å°±æ¯å¨æ建 Context ä¸ç¨æ·å¯ä»¥å¨ææ·»å æä¿®æ¹å·²æçé
置信æ¯ï¼å®ä¸é¢åæå¤ä¸ªåç±»ï¼å
¶ä¸æç»å¸¸ä½¿ç¨çæ¯å¯æ´æ°ç Contextï¼å³ AbstractRefreshableApplicationContext ç±»ã
WebApplicationContext 顾åæä¹ï¼å°±æ¯ä¸º web åå¤ç Context ä»å¯ä»¥ç´æ¥è®¿é®å° ServletContextï¼é常æ
åµä¸ï¼è¿ä¸ªæ¥å£ä½¿ç¨çå°ã
åå¾ä¸åå°±æ¯æç
§æ建 Context çæ件类åï¼æ¥çå°±æ¯è®¿é® Context çæ¹å¼ãè¿æ ·ä¸çº§ä¸çº§ææäºå®æ´ç Context ç级å±æ¬¡ã
æ»ä½æ¥è¯´ ApplicationContext å¿
é¡»è¦å®æ以ä¸å 件äºï¼
æ è¯ä¸ä¸ªåºç¨ç¯å¢
å©ç¨ BeanFactory å建 Bean 对象
ä¿å对象å
³ç³»è¡¨
è½å¤æè·åç§äºä»¶
Context ä½ä¸º Spring ç Ioc 容å¨ï¼åºæ¬ä¸æ´åäº Spring ç大é¨ååè½ï¼æè
说æ¯å¤§é¨ååè½çåºç¡ã
Core ç»ä»¶
Core ç»ä»¶ä½ä¸º Spring çæ ¸å¿ç»ä»¶ï¼ä»å
¶ä¸å
å«äºå¾å¤çå
³é®ç±»ï¼å
¶ä¸ä¸ä¸ªéè¦ç»æé¨åå°±æ¯å®ä¹äºèµæºç访é®æ¹å¼ãè¿ç§æææèµæºé½æ½è±¡æä¸ä¸ªæ¥å£çæ¹å¼å¾å¼å¾å¨ä»¥åç设计ä¸æ¿æ¥å¦ä¹ ãä¸é¢å°±éè¦çä¸ä¸è¿ä¸ªé¨åå¨ Spring çä½ç¨ã
温馨提示:答案为网友推荐,仅供参考