小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

解決Spring的Component-scan和packagesToScan不支持Eclipse RCP問(wèn)題

 hehffyy 2013-04-24

Spring 2.5開(kāi)始,通過(guò)component-scan和packagesToScan設(shè)置,實(shí)現(xiàn)對(duì)jar包和class文件的package層級(jí)的自動(dòng)掃描,從而利用Annotation實(shí)現(xiàn)零配置。

 

但在Eclipse RCP中,由于Eclipse的bundle原理,其bundle的jar包url為類(lèi)似:bundleresource://269.fwk7214088/...  , 而Spring對(duì)jar和class文件的scan卻只支持file的protocol,即url必須是類(lèi)似:file:/F:/eclipse/....  所以在Eclipse RCP中集成SpringFramework,并在spring配置文件中使用component-scan和packagesToScan設(shè)置時(shí),這兩個(gè)配置失效,并拋出異常:

 

寫(xiě)道
2010-11-12 16:21:17,843 PathMatchingResourcePatternResolver WARN - Cannot search for matching files underneath URL [bundleresource://269.fwk7214088/com/abc/efg/] because it does not correspond to a directory in the file system
java.io.FileNotFoundException: URL [bundleresource://269.fwk7214088/com/abc/efg/] cannot be resolved to absolute file path because it does not reside in the file system: bundleresource://269.fwk7214088/com/abc/efg/
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:204)
at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:51)
at org.springframework.core.io.UrlResource.getFile(UrlResource.java:168)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.doFindPathMatchingFileResources(PathMatchingResourcePatternResolver.java:530)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:351)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:269)
at org.springframework.context.support.AbstractApplicationContext.getResources(AbstractApplicationContext.java:1196)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:204)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:204)
at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1335)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1325)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:136)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:465)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:395)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
 

 

 

 

在網(wǎng)上Google無(wú)果的情況下,只好把目標(biāo)放到了:

at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:204)

 

打開(kāi)org.springframework.core-sources-3.0.1.RELEASE-A中的源碼包,查看ResourceUtils.java:204,發(fā)現(xiàn)其代碼如下:

Java代碼  收藏代碼
  1. if (!URL_PROTOCOL_FILE.equals(resourceUrl.getProtocol())) {  
  2.     throw new FileNotFoundException(  
  3.         description + " cannot be resolved to absolute file path " +  
  4.         "because it does not reside in the file system: " + esourceUrl);  
  5. }  

 如果在這段代碼前,可以把bundleresource類(lèi)型的package轉(zhuǎn)換為file類(lèi)型的package,問(wèn)題就可以解決。于是在這段代碼前增加相關(guān)轉(zhuǎn)換處理:

Java代碼  收藏代碼
  1. //Support Eclipse RCP bundle, Modify by Alex  
  2. String protocol = resourceUrl.getProtocol();  
  3. if(protocol.equals("bundleresource") || protocol.startsWith("bundle")) {  
  4.     try {  
  5.     resourceUrl = org.eclipse.core.runtime.Platform.resolve(resourceUrl);  
  6.     } catch(IOException e) {  
  7.         e.printStackTrace();  
  8.     }  
  9. }  
  10.   
  11. if (!URL_PROTOCOL_FILE.equals(resourceUrl.getProtocol())) {  
  12.     throw new FileNotFoundException(  
  13.             description + " cannot be resolved to absolute file path " +  
  14.             "because it does not reside in the file system: " + resourceUrl);  
  15. }  

 編譯后,把ResourceUtil.class替換到spring-core.jar中就可以了。

 

值得注意的是,因?yàn)檫@里URL的轉(zhuǎn)換使用了org.eclipse.core.runtime.Platform,所以spring-core.jar所在的bundle必須添加Dependencies : org.eclipse.core.runtime 

 

當(dāng)然了,因?yàn)檫@里的jar包是針對(duì)Eclipse 的RCP所用,所以這個(gè)應(yīng)該也不是大問(wèn)題

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多