Could not resolve bean definition resource pattern 解答了加分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Could not resolve bean definition resource pattern 解答了加分相关的知识,希望对你有一定的参考价值。

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerorg.springframework.beans.factory.BeanDefinitionStoreException: Could not resolve bean definition resource pattern [classpath:com/wei/ssi/conf/spring/*.xml]; nested exception is java.io.FileNotFoundException: class path resource [com/wei/ssi/conf/spring/] cannot be resolved to URL because it does not existat org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:221)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385)at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284)at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135)at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)at org.apache.catalina.core.StandardService.start(StandardService.java:519)

这里是使用BeanDefinitionReader载入Bean定义的地方,因为允许有多种载入方式,
*虽然用得最多的是XML定义的形式,这里通过一个抽象函数把具体的实现委托给子类来完成。
*/ protected abstract void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws IOException, BeansException; public int loadBeanDefinitions(String location, Set actualResources) throws BeanDefinitionStoreException //这里取得 ResourceLoader,使用的是DefaultResourceLoader。 ResourceLoader resourceLoader = getResourceLoader(); if (resourceLoader == null) throw new BeanDefinitionStoreException( "Cannot import bean definitions from location [" + location + "]: no ResourceLoader available"); /**

*这里对Resource的路径模式进行解析,比如我们设定的各种Ant格式的路径定义,得到需要的
*Resource集合,这些Resource集合指向我们已经定义好的BeanDefinition信息,可以是多个文件。
*/ if (resourceLoader instanceof ResourcePatternResolver) // Resource pattern matching available. try // 调用DefaultResourceLoader的getResource完成具体的Resource定位 。 Resource[] resources = ((ResourcePatternResolver) resourceLoader). getResources(location); int loadCount = loadBeanDefinitions(resources); if (actualResources != null) for (int i = 0; i < resources.length; i++) actualResources.add(resources[i]); if (logger.isDebugEnabled()) logger.debug("Loaded " + loadCount + " bean definitions from location pattern [" + location + "]"); return loadCount; catch (IOException ex) throw new BeanDefinitionStoreException( "Could not resolve bean definition resource pattern [" + location + "]", ex); else // Can only load single resources by absolute URL. // 调用DefaultResourceLoader的getResource完成具体的Resource定位 。 Resource resource = resourceLoader.getResource(location); int loadCount = loadBeanDefinitions(resource); if (actualResources != null) actualResources.add(resource); if (logger.isDebugEnabled()) logger.debug("Loaded " + loadCount + " bean definitions from location [" + location + "]"); return loadCount; //对于取得Resource的具体过程,我们可以看看DefaultResourceLoa der是怎样完成的: public Resource getResource(String location) Assert.notNull(location, "Location must not be null"); //这里处理带有classpath标识的Resource。 if (location.startsWith(CLASSPATH_URL_PREFIX)) return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX. length()), getClassLoader()); else try // Try to parse the location as a URL... // 这里处理URL标识的Resource定位。 URL url = new URL(location); return new UrlResource(url); catch (MalformedURLException ex) // No URL -> resolve as resource path. /** *如果既不是classpath,也不是URL标识的Resource定位,则把getRe source的重任 *交给 getResourceByPath,这个方法是一个protected方法,默认的实现是 得到一 *个ClassPathContextResource,这个方法常常会用子类来实现。 */ return getResourceByPath(location);

前面我们看到的getResourceByPath会被子类FileSystemXmlApplicationContext实现,这个方法返回的是一个 FileSystemResource对象,通过这个对象Spring可以进行相关的IO操作,完成BeanDefinition的定位。分析到这里已经一目了然,它实现的就是对path进行解析,然后生成一个FileSystemResource对象并返回,如代码清单2-6所示。
代码清单2-6 FileSystemXmlApplicationContext生成Resource对象
protected Resource getResourceByPath(String path) if (path != null && path.startsWith("/")) path = path.substring(1); return new FileSystemResource(path);

如果是其他的ApplicationContext,那么对应地会生成其他种类的Resource,比如ClassPathResource、ServletContextResource等。关于Spring中Resource的种类,可以在图2-6中的Resource类的继承关系中了解。作为接口的Resource定义了许多与IO相关的操作,这些操作也都可以从图2-6中Resource的接口定义中看到。这些接口对不同的Resource实现代表着不同的意义,是Resource的实现需要考虑的。

从图2-6中我们可以看到Resource的定义和它的继承关系,通过对前面的实现原理的分析,我们以FileSystemXmlApplicationContext的实现原理为例子,了解了Resource定位问题的解决方案,即以FileSystem方式存在的Resource的定位实现。在BeanDefinition定位完成的基础上,就可以通过返回的Resource对象来进行BeanDefinition的载入了。在定位过程完成以后,为BeanDefinition的载入创造了IO操作的条件,但是具体的数据还没有开始读入。这些数据的读入将在下面看到的BeanDefinition的载入和解析中来完成。仍然以水桶为例子,这里就像如果要用水桶去打水,那么先要找到水源。这里完成对Resource的定位,就类似于水源已经找到了,下面就是打水的过程了,类似于把找到的水装到水桶里的过程。找水不简单,但与打水相比,我们发现打水更需要技巧。
参考技术A path resource [com/wei/ssi/conf/spring/] cannot be resolved to URL because it does not exist
这个目录不存在本回答被提问者采纳
参考技术B Spring加载的时候没有找到配置文件,自习检查配置文件路径

解决:Could not resolve bean definition resource pattern [/WEB-INF/classes/spring/applicationContext-*.

问题:


用Maven搭建spring、springmvc、mybatis时,运行报错:

org.springframework.beans.factory.BeanDefinitionStoreException: Could not resolve bean definition resource pattern
[classpath:spring/applicationContext-*.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring/] cannot be resolved to URL because it does not exist

意思是说:
无法找到applicationContext-*.xml这个配置文件,因为这些文件不存在

原因:
在我的工程中,src/main/java下的mapper包中有mapper.java和mapper.xml文件,src/main/config目录有spring,mybatis,springmvc的配置文件
技术图片

 


这两个路径下最终对应maven的运行路径时:

技术图片

 


我们知道,maven在扫描java文件夹时,不会扫描其中的.xml文件,因为它默认是扫描java文件的,这样mapper.xml就会丢失而导致报错,所以我们会在pom文件中添加这样的配置:

<build> 
    <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
        </resources>
    </build>

上述配置的意思是:maven扫描src/main/java这个文件夹,并且要扫描所有.xml和.properties文件,这样一来可以解决maven扫描mapper.xml缺失的问题,但是由于修改了默认的resource目录,导致src/main/resources的所有文件都不能被扫描,也就出现了applicationContext文件不能被扫描的错误,所以应该配置两个:

<build> 
    <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
       由于修改了默认的resource目录,导致src/main/resources的所有文件都不能被扫描,因此还要配多一个
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

 

转自:https://blog.csdn.net/jeffleo/article/details/55271858

以上是关于Could not resolve bean definition resource pattern 解答了加分的主要内容,如果未能解决你的问题,请参考以下文章

org.springframework.beans.factory.annotation.value 防止不存在报错Could not resolve placeholder

org.springframework.beans.factory.annotation.value 防止不存在报错Could not resolve placeholder

Could not resolve placeholder 'jdbc username' in string valu

Could not determine the dependencies of task ‘:app:compileDebugJavaWithJavac‘ Could not resolve all

Could not determine the dependencies of task ‘:app:compileDebugJavaWithJavac‘ Could not resolve all

IDEA用github提交Could not resolve host: github.com的解决方案