ǰÑÔ
µ½ÏÖÔÚΪֹ£¬ÎÒÃÇÒѾÁ˽âÁËOSGi¿ò¼ÜµÄÏÂÃæÁ½²ã£¬¶ø×÷ΪOSGi¿ò¼ÜÖÐ×îÉÏÃæµÄÒ»²ã£¬·þÎñ²ã´ø¸øÁËÎÒÃǸü¶àµÄ¶¯Ì¬ÐÔ£¬²¢ÇÒʹÓÃÁË´ó¼Ò»ò¶à»òÉÙ¶¼ÔøÁ˽â¹ýµÄÃæÏò·þÎñ±à³ÌÄ£ÐÍ£¬ÆäºÃ´¦ÊÇÏÔ¶øÒ×¼ûµÄ¡£
ÕâÀïÎÒÃÇÒÀÈ»»á½²½âʲôÊÇ·þÎñ²ãºÍ·þÎñ²ã¶ÔÓÚOSGi¿ò¼ÜµÄÒâÒ壬´ËÍ⣬»¹½«¸æËß´ó¼ÒʲôʱºòÓ¦¸ÃʹÓ÷þÎñ£¬Ê²Ã´Ê±ºò²»Ó¦¸ÃʹÓá£×îºó½«»áÊÇOSGi·þÎñ²ãµÄһЩ»ù´¡£¬°üÀ¨ÈçºÎ¶¨Òå¡¢×¢²áºÍ·¢ÏÖ·þÎñ¡£
1 ʲôÊÇ·þÎñ
¼òµ¥µÄ˵£¬·þÎñ¾ÍÊÇ¡°Îª±ðÈËËù×öµÄ¹¤×÷¡±£¬±ÈÈçÁ½¸ö¶ÔÏó»¥Ïàµ÷Ó÷½·¨£¬ÄÇô±»µ÷ÓÃÕß¾ÍÊÇÔÚΪµ÷ÓÃÕß×ö¹¤×÷¡£
Ò²ÐíÓеÄÈË»á¾õµÃ·þÎñÊÇ´ÓÍøÂçÉÏ»ñÈ¡µÄ£¬µ«ÊǾµäµÄ¿´·¨Æäʵ²¢Ã»ÓÐÕâ¸öÏÞÖÆ£¬ÓÐʱºò¼´Ê¹ÊÇÍêÈ«±¾µØµÄÓ¦Óã¬Ò²ÄÜ´ÓÃæÏò·þÎñµÄ±à³ÌÖеõ½ºÃ´¦¡£
ÄÇôÈçºÎ½«·þÎñºÍÒ»´ÎÆÕͨµÄ·½·¨µ÷ÓÃÇø±ð¿ªÀ´ÄØ£¿Æäʵһ¸ö·þÎñ¿ÉÒÔ¿´×÷ÊÇÔÚ·þÎñµÄÌṩÕߺÍʹÓÃÕßÖ®¼äµÄÒ»¸öÆõÔ¼¡£Ê¹ÓÃÕßÒ»°ã²»¹ØÐÄÆäʵÏÖµÄϸ½Ú£¬ÉõÖÁÁ¬ËÌṩµÄ¶¼²»ÏëÖªµÀ£¬Ö»ÒªÂú×ãÕâ¸öÆõÔ¼£¨·þÎñÓ¦¸ÃÌṩʲô¹¦ÄÜ£¬Âú×ãʲô¸ñʽ£©¾ÍºÃÁË¡£Ê¹Ó÷þÎñµÄ¹ý³ÌÒ²°üº¬ÁË·¢ÏÖ·þÎñºÍ´ï³ÉÐÒéµÄÐÎʽ£¬Ò²¾ÍÊÇ˵ÎÒÃÇÐèҪͨ¹ý·þÎñµÄ±êÖ¾ÐÔÌØÕ÷À´ÕÒµ½¶ÔÓ¦µÄ·þÎñ¡£
Æäʵ£¬JavaµÄ½Ó¿Ú¿ÉÒÔ˵ÌṩÁËÒ»ÖÖÆõÔ¼µÄÌṩ·½Ê½£¬ÎÒÃÇÄÜͨ¹ýÐÞ¸ÄclasspathÀ´Ìæ»»½Ó¿ÚµÄ²»Í¬µÄ¾ßÌåʵÏÖ¡£µ«ÊÇOSGiÄܹ»ÎªÕÒµ½·þÎñÌṩ¸ü¼Ó¸ß²ãµÄ³éÏó²¢ÇÒÔÚÓ¦ÓõÄÖ´ÐÐʱ¶¯Ì¬Ìæ»»·þÎñµÄʵÏÖ£¬ÕâÐ©ÌØÐÔÔÚÉԺ󽫻áÌáµ½¡£
2 ΪʲôҪʹÓ÷þÎñ
·þÎñ£¨¸ü׼ȷµÄ˵ÊÇÃæÏò·þÎñµÄ±à³ÌÄ£ÐÍ£©¸øÓèÁËÎÒÃÇÒ»ÖÖ¼´²å¼´ÓõÄÈí¼þ¿ª·¢·½·¨£¬ÒâζןüÇ¿µÄÁé»îÐÔ¡£ÕâÖÖÁé»îÐÔÊÇÈçºÎÌåÏÖµÄÄØ£¿
µÍñîºÏ£¬ÀûÓÚ×é¼þ¸´ÓãºÍ¨¹ý·þÎñÎÒÃÇÄܹ»ÇåÎúµÄ¶¨Òå×é¼þµÄ±ß½ç£¬´Ó¶ø½«·þÎñµÄʹÓÃÕߺÍÌṩÕßÖ®¼äµÄñîºÏ¶È½µµ½ºÜµÍ¡£
¸ü¼ÓÇ¿µ÷½Ó¿Ú¶ø²»ÊÇÔÚ¾ßÌåµÄʵÏÖ£ºJavaµÄinterfaceÌṩÁËÒ»ÖÖÐÎʽµÄÆõÔ¼£¬ÔÚOSGiµÄ·þÎñ²ãÖгä·ÖÀûÓÃÁ˽ӿÚÌØÐÔµÄÓÅÊÆ£¬ÕâÑùʹµÃÎÞÂÛÓжàÉÙ¸öÀàʵÏÖÁËÕâ¸ö½Ó¿Ú£¬Ö»ÒªÂú×ã¶ÔÕâ¸ö½Ó¿ÚµÄ¹¦ÄÜÐèÒª£¬¾Í¿ÉÒÔ±»Ê¹ÓÃÕßʹÓá£
¶ÔÓÚÒÀÀµÓбȽÏÇåÎúµØÃèÊö£ºµ¥Êǽӿڱ¾ÉíÖ»°üº¬·þÎñµÄÃû³ÆºÍ²ÎÊýÀàÐÍ£¬²¢²»×ãÒÔÇå³þµÄÃèÊö·þÎñµÄËùÓÐÌØÕ÷£¬¶øÃæÏò·þÎñµÄ±à³ÌÄ£ÐÍÖÐÒªÇóÁ˸ü¼ÓÇåÎúµÄÃèÊöʹµÃÕâÐ©ÌØÕ÷Äܹ»Î¨Ò»±êʶһ¸ö·þÎñ¡£
Ö§³Ö¶Ô¶à¸ö¾ºÕùʵÏÖ£¨¶à¸öʵÏÖͬһ¸ö½Ó¿ÚµÄÀࣩµÄɸѡ£º·þÎñ¿ò¼Ü»á°ïÖúÄã¼Ç¼·þÎñµÄÔªÊý¾Ý£¬¿ÉÒԾݴ˰ïÖúʹÓÃÕß²éѯºÍɸѡ·þÎñ£¬Ê¹ÓÃÕ߸ü¼ÓµÄÖ÷¶¯£¬ÕâÒ»µãºÍ´«Í³µÄÒÀÀµ×¢Èë¿ò¼Ü²»Í¬¡£
3 ʲôʱºòʹÓÃ/²»Ê¹Ó÷þÎñ
¿ÉÒÔ¿¼ÂÇʹÓõÄʱºò£º
µ±Äã³£³£ÏëÒª¶ÔÖ÷ÒªµÄ×é¼þ½øÐÐÌæ»»ºÍÉý¼¶¶ø²»ÏëÖØÐ´Ó¦ÓÃµÄÆäËû²¿·Ö£¬»òÕßµ±ÄãÔÚ³ÌÐòÖÐÏëÒª²éÕÒºÍÑ¡Ôñ²»Í¬µÄ½Ó¿ÚʵÏÖµÄʱºò¡£
²»Ó¦¸ÃʹÓõÄʱºò£º
·þÎñµÄ¼ÓÈëºÍά»¤ÍùÍù³ÖÐøµÄÔö¼Ó¿ò¼ÜµÄ¿ªÏú£¬ËùÒÔµ±Ä㿪·¢µÄ´úÂë¶ÔÐÔÄÜÐèÇóÃô¸ÐµÄʱºò£¬²»ÒªÊ¹Ó÷þÎñ¡£
ÏÔÈ»ËüÒ²²»Ó¦¸Ã³öÏÖÔÚÁ½¶Î¾³£Ò»Æð¿ª·¢ºÍ¸üеĽôñîºÏ´úÂëÖ®¼ä£¬³ý·ÇÄãÕæµÄÐèÒªÔÚ×Ô¼ºÐ´µÄ´úÂëÖеõ½¡°Ò»¸ö½Ó¿Ú¶à¸öʵÏÖ¡±µÄÑ¡ÔñȨ¡£
×îºó£¬Èç¹û²»È·¶¨ÊÇ·ñÓ¦¸ÃʹÓ÷þÎñ£¬¿ÉÒÔÏÈÓÃÃæÏò½Ó¿ÚµÄ·½Ê½ÊµÏÖ£¬ÕâÖÁÉÙÊǺÍʹÓ÷þÎñºÜ½Ó½üÁË£¬²¢ÇÒËüÒ²Äܼò»¯ÄãµÄ¿ª·¢¡£Èç¹ûÄÄÌìÄã϶¨¾öÐÄÏë°ÑËûÃÇÒÆÖ²µ½·þÎñ²ãÁË£¬ÔÚÃæÏò½Ó¿ÚµÄ»ù´¡ÉÏÕâ¸öÒ»Ö±¹¤×÷Ò²»á±äµÃ·Ç³£ÈÝÒס£
4 OSGi·þÎñ²ã»ù´¡
Ê×ÏÈ£¬ÐèҪ˵Ã÷µÄÊÇ£¬OSGiµÄ·þÎñ²ã³ý¿ªÇ°ÃæÌáµ½µÄÃæÏò·þÎñµÄ±à³ÌÄ£ÐÍ£¬»¹ÓÐÒ»¸öÇø±ðÓÚÆäËûºÜ¶àÀàËÆÄ£Ð͵ÄÌØÐÔ£¬ÄǾÍÊÇ·þÎñµÄÍêÈ«¶¯Ì¬ÐÔ¡£Ò²¾ÍÊÇ˵£¬µ±Ò»¸öbundle·¢ÏÖ²¢¿ªÊ¼Ê¹ÓÃOSGiÖеÄÒ»¸ö·þÎñÁËÒÔºó£¬Õâ¸ö·þÎñ¿ÉÄÜÔÚÈκεÄʱºò¸Ä±ä»òÕßÊÇÏûʧ¡£Õâ·½ÃæµÄÄÚÈݽ«ÔÚÒÔºó¸ü¼ÓÉîÈëµÄ½²½â¡£
OSGi¿ò¼ÜÓÐÒ»¸öÖÐÐÄ»¯µÄ×¢²á±í£¬Õâ¸ö×¢²á±í×ñ´Ópublish-find-bindÄ£ÐÍ£º

Ò»¸öÌṩ·þÎñµÄbundle¿ÉÒÔ·¢²¼POJO×÷Ϊ·þÎñµÄʵÌ壻һ¸öʹÓ÷þÎñµÄbundle¿ÉÒÔͨ¹ýÕâ¸ö×¢²á±íÕÒµ½ºÍ°ó¶¨·þÎñ¡£
ÎÒÃÇ¿ÉÒÔͨ¹ýBundleContext½Ó¿ÚÀ´Íê³ÉÉÏÊöµÄ¹¤×÷£¬ÏÂÃæ¾ÍÊǺ¬ÓÐÕâ·½Ãæ¹¦ÄܵĽӿÚÁÐ±í£º
public interface BundleContext { ... void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException; void addServiceListener(ServiceListener listener); void removeServiceListener(ServiceListener listener); ServiceRegistration registerService(String[] clazzes, Object service, Dictionary properties); ServiceRegistration registerService(String clazz, Object service, Dictionary properties); ServiceRegistration[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException; ServiceRegistration[] getAllServiceReferences(String clazz, String filter) throws InvalidSyntaxException; ServiceReference getServiceReference(String clazz); Object getService(ServiceReference reference); boolean ungetService(ServiceReference reference); ... } |
4.1 ·¢²¼·þÎñ
ΪÁËÈñðµÄbundleÄÜ·¢ÏÖÕâ¸ö·þÎñ£¬Äã±ØÐëÔÚ·¢²¼Ëü֮ǰ¶ÔÆä½øÐÐÌØÕ÷ÃèÊö¡£ÕâÐ©ÌØÕ÷°üÀ¨½Ó¿ÚµÄÃû×Ö£¨¿ÉÒÔÊÇÃû×ÖµÄÊý×飩£¬½Ó¿ÚµÄʵÏÖ£¬ºÍÒ»¸ö¿ÉÑ¡µÄjava.util.DictionaryÀàÐ͵ÄÔªÊý¾ÝÐÅÏ¢¡£ÏÂÃæÊÇÒ»¸öÀý×Ó£º
String[] interfaces = new String[]{StockListing.class.getName(), StockChart.class.getname()}; Dictionary metadata = new Properties(); metadata.setProperty(¡°name¡±, ¡°LSE¡±); metadata.setProperty(¡°currency¡±, Currency.getInstance(¡°GBP¡±)); metadata.setProperty(¡°country¡±, ¡°GB¡±); ServiceRegistration registration = bundleContext.registerService(interfaces, new LSE(), metadata); |
ÔÚÉÏÃæµÄ´úÂëÖУ¬ÎÒÃǵõ½ÁËServiceRegistration¶ÔÏó£¬ÎÒÃÇ¿ÉÒÔÓÃÕâ¸ö¶ÔÏóÀ´¸üзþÎñµÄÔªÊý¾Ý£º
registration.setProperties(newMetadata);
Ò²¿ÉÒÔÖ±½Ó¾Í°ÑÕâ¸ö·þÎñÒÆ³ý£º
registration.unregister();
ÐèҪעÒâµÄÊÇÕâ¸ö¶ÔÏó²»ÄÜºÍÆäËûBundles¹²Ïí£¬ÒòΪËüºÍ·¢²¼·þÎñµÄbundleµÄÉúÃüÖÜÆÚÏ໥ÒÀ´æ£¬Ò²¾ÍÊÇ˵£¬Èç¹ûÕâ¸öbundleÒѾ²»ÔÚ¿ò¼ÜÖ´Ðл·¾³ÖдæÔÚ£¬ÄÇôÕâ¸ö¶ÔÏóÒ²²»Ó¦¸Ã´æÔÚÁË£¬¡°Æ¤Ö®²»´æÃ«½«Ñɸ½¡±¾ÍÊÇÕâ¸öµÀÀí¡£
ÊÔÏëÈç¹ûÕâ¸öServiceRegistration¹²Ïí¸øÁËÆäËûµÄbundle£¨¾ßÌåµÄ˵¾ÍÊÇÆäËûbundleÖдæÔÚ¶ÔÕâ¸ö¶ÔÏóµÄÒýÓã©£¬ÄÇô·¢²¼·þÎñµÄÄǸöbundle¼´Ê¹±»ÒƳýÁË£¬ÓÉÓÚÆäËûbundleÖеÄÒýÓÃÒÀÈ»´æÔÚ£¬ÄÇôÀ¬»ø´¦Àí»úÖÆ²»»áĨȥÕâ¸ö¶ÔÏó£¬ÕâÑù²»µ«ÓÚÀí²»ºÏ£¬¶øÇÒʵ¼ÊÉÏÕâ¸ö¶ÔÏóÒ²ÊDz»¿ÉÓõģ¬ÒòΪÕâ¸ö¶ÔÏóËùÒÀ´æµÄbundleÒѾ²»ÔÚÁË¡£
´úÂëÖеIJÎÊýnew LSE()ÊÇÒ»¸öPOJO£¬Õâ¸ö¶ÔÏó²»ÐèҪʵÏÖÈκÎOSGiÀàÐÍ»òÕßʹÓñê×¢£¬Ö»ÒªÂú×ã·þÎñÔ¼¶¨£¨ÕâÀï¾ÍÊǽӿڣ©¾Í¿ÉÒÔÁË¡£
´ËÍ⣬Èç¹ûÔÚɾ³ý·¢²¼µÄ·þÎñ֮ǰbundleÍ£Ö¹ÁË£¬¿ò¼Ü»á°ïÖúÄãɾ³ýÕâЩ·þÎñ¡£
4.2 ·¢ÏֺͰ󶨷þÎñ
ÉÏһС½ÚÎÒÃÇ˵Ã÷ÁËÈçºÎÃèÊöºÍ·¢²¼Ò»¸ö·þÎñ£¬ÄÇôÏÖÔÚÎÒÃÇ¿ÉÒÔ¸ù¾Ý·þÎñÔ¼¶¨´Ó×¢²á±íÖÐÕÒµ½ÕýÈ·µÄ·þÎñ¡£
ÏÂÃæÊÇ·¢ÏÖ·þÎñ²¢»ñµÃÆäÒýÓõĽӿڣº
ServiceReference reference = bundleContext.getServiceReference(StockListing.class.getName()); |
ÕâÊǸù¾ÝʵÏֵĽӿÚÃû³Æ»ñµÃµÄ·þÎñ£¬Ò²ÊÇ×î¼òµ¥µÄ·½·¨¡£
×¢ÒâÕâÀïµÄreferenceÊÇ·þÎñ¶ÔÏóµÄ¼ä½ÓÒýÓ㬿ÉÊÇΪʲôҪÓüä½ÓÒýÓöø²»Ö±½Ó·µ»ØÄǸöʵ¼ÊµÄ·þÎñ¶ÔÏóÄØ£¿Êµ¼ÊÉÏÊÇΪÁ˽«·þÎñµÄʹÓúͷþÎñµÄʵÏÖ½øÐнâñ½«·þÎñ×¢²á±í×÷ΪÁ½ÕßµÄÖмäÈË£¬´ïµ½¸ú×ٺͿØÖÆ·þÎñµÄÄ¿µÄ£¬Í¬Ê±»¹¿ÉÒÔÔÚ·þÎñÏûʧÁËÒÔºó֪ͨʹÓÃÕß¡£
Õâ¸ö·½·¨µÄ·µ»ØÀàÐÍÊÇServiceReference£¬Ëü¿ÉÒÔÔÚbundleÖ®¼ä»¥Ïí£¬ÒòΪËüºÍʹÓ÷þÎñµÄbundleµÄÉúÃüÖÜÆÚÎ޹ء£
4.2.1 Ñ¡Ôñ×îÊʺÏÄãµÄ·þÎñ
ÔÚgetServiceReferenceÕâ¸ö·½·¨ÖУ¬Ñ¡ÔñserviceµÄĬÈÏÓÅÏȼ¶ÊÇÏÈÑ¡Ôñservice.rank×î¸ßµÄ£¬ÔÚrankÏàµÈµÄÇé¿öÏÂÑ¡Ôñ×îÔçÔÚ¿ò¼ÜÖÐ×¢²áµÄ¡£³ýÁËÕâ¸öĬÈϵĹæÔò£¬ÎÒÃÇ»¹¿ÉÒÔÔÚ
getServiceReferencesÖÐͨ¹ýÌí¼Ó¹ýÂ˲ÎÊý£¨×÷Ϊµ÷Óø÷½·¨µÄµÚ¶þ¸ö²ÎÊý£©À´×öһЩɸѡ¡£
ServiceReference[] references = bundleContext.getServiceReferences(StockListing.class.getName(), ¡°(&(currency=GBP)(objectClass=org.example.StockChart))¡±); |
ÔÚÕâÀïµÄÆ¥Åä²ÎÊýÊÇÒ»¸ö×Ö·û´®£¬Õâ¸ö×Ö·û´®µÄ¸ñʽÊôÓÚLDAP²éѯ¸ñʽ£¬ÔÚRFC 1960±ê×¼ÖÐÓÐÍêÕûµÄÃèÊö¡£
ÉÏÃæµÄ×Ö·û´®ÖеȺÅ×ó±ßµÄÄÚÈݾÍÊÇÇ°ÃæÌáµ½µÄÔªÊý¾Ý£¨Dictionary£©ÖеÄ×óÖµ£¬Í¨¹ýÕâ¸ö×óÖµ¶ÔÓ¦µÄÓÒÖµÀ´Óë·þÎñËù´øÓеÄÔªÊý¾Ý½øÐÐÆ¥Å䡣һЩ¼òµ¥µÄÆ¥ÅäʾÀýÈçÏ£º
ÊôÐÔÆ¥Åä:
(name=John Smith)
(age>=20)
(age<=65)
Ä£ºýÆ¥Åä:
(name~=johnsmith)
ͨÅä·ûÆ¥Åä:
(name=Jo*n*Smith*)
ÅжÏij¸öÊôÐÔÊÇ·ñ´æÔÚ:
(name=)
Ìõ¼þÓë:
(&(name=John Smith)(occupation=doctor))
Ìõ¼þ»ò:
(|(name~=John Smith)(name~=Smith John))
*Ìõ¼þ·Ç: **
(!(name=John Smith))
4.2.2 °ó¶¨ºÍʹÓ÷þÎñ
ÔÚÄã·¢ÏÖÁË·þÎñÖ®ºó£¬Ê¹Ó÷þÎñ֮ǰ£¬Äã±ØÐë´Ó×¢²á±íÖаó¶¨ÊµÏֵķþÎñ¡£
StockListing listing = (StockListing) bundleContext.getService(reference); |
Õâ¸ö·½·¨·µ»ØµÄPOJOʵÀýºÍ֮ǰÔÚ×¢²á±íÖÐ×¢²áµÄʵÀýÊÇͬһ¸ö¡£
ÿ´ÎʹÓÃgetService·½·¨µÄʱºò£¬×¢²á±í»á½«¶ÔÓ¦·þÎñµÄʹÓôÎÊý¼Ó1£¬Í¬Ê±»á¼Ç¼ËÔÚʹÓÃÕâ¸ö·þÎñ¡£ËùÒÔµ±Äã²»ÔÚÏëʹÓÃÕâ·þÎñµÄʱºò£¬×îºÃ¸æËß×¢²á±íÒ»Éù¡£
bundleContext.ungetService(reference); listing = null; |
¸ø³öµÚ¶þÌõÓï¾äµÄÄ¿µÄ²¢²»ÊÇΪÁË֪ͨע²á±í£¬¶øÊÇΪÁËÈÃjavaµÄÀ¬»ø´¦Àí»úÖÆ°²È«ÔË×÷¡£ÒòΪÕâÀïÎÒÃÇÓÃÁËÒ»¸ö¾Ö²¿±äÁ¿listingÀ´×÷Ϊ·þÎñ¶ÔÏóµÄÒ»¸öÒýÓ㬣¨²»·Á¼ÙÉèlistingÊÇ×îºóÒ»¸öÒýÓÃÕâ¸ö¶ÔÏóµÄ±äÁ¿£©£¬Èç¹ûÎÒÃDz»ÉèΪnull£¬ÄÇôÔÚÕâ¸ölistingÏûÍö֮ǰ£¬ÄǸö·þÎñ¶ÔÏóÓпÉÄܲ»»á±»À¬»ø´¦Àíµô£¨¼´Ê¹ÔÚ³ÌÐòÂß¼ÉÏÕâ¸ö·þÎñ¶ÔÏóÒѾÊÇ¡°À¬»ø¡±ÁË£©£¬Õâ¿ÉÄÜ»áÒý·¢Ò»Ð©ÎÊÌâ¡£
²»¹ý£¬ÕâÖÖÓþֲ¿±äÁ¿ÒýÓ÷þÎñ¶ÔÏóµÄ·½Ê½±¾À´¾Í²»¶Ô¡£Ò»°ãÀ´Ëµ£¬»¹ÊÇÓ¦¸ÃÔÚÿ´ÎÐèҪʹÓõÄʱºòÁÙʱ´ÓServiceReference»ñµÃ£¬²¢ÇÒÒª¿¼Âǵ½Õâ¸ö·þÎñÔÚÈκÎʱºò¶¼ÓпÉÄÜÏûÍö¡£
5 ×ܽá
ÖÁ´Ë£¬Èý¸ö²ã´ÎµÄ»ù´¡ÐÔ½²½âÒѾȫ²¿½áÊøÁË¡£ÈýƪÈëÃż¶ÎĵµÒÔºó£¬ÏàÐŶÁÕß¶ÔOSGi¿ò¼ÜÒѾÓÐÁËÒ»¸ö´óÖµÄÁ˽⣬½ÓÏÂÀ´½¨Òé´ó¼ÒÅäºÏ¡¶OSGi¿ª·¢»·¾³µÄ½¨Á¢ºÍHelloWorld¡·ÕâÆªÎĵµ×Ô¼ºÊµ¼Ê²Ù×÷Ò»ÏÂ֮ǰ½²µ½µÄһЩÄÚÈÝ£¬¹®¹ÌÒ»ÏÂÕâ¸öϵÁеÄ֪ʶ£¬Îª½ÓÏÂÀ´µÄ½ø½×ƪÄÚÈÝ×öºÃ×¼±¸¡£
|