Java 未找到Spring MVC 4.1 ResourceUrlProvider

Java 未找到Spring MVC 4.1 ResourceUrlProvider,java,spring,spring-mvc,velocity,Java,Spring,Spring Mvc,Velocity,我正在使用Velocity Teamplets开发SpringMVC4.1应用程序。我正在尝试获取资源处理设置。本教程记录了我想要的内容: 但是,ResourceUrlAdvice会引发一个错误,即未定义ResourceUrlProvider。我认为ResourceUrlProvider应该由@EnableWebMvc自动定义(我没有使用SpringBoot) 我甚至尝试在我的MvcConfig类中显式声明@Bean,但它仍然抛出了一个错误。我觉得我错过了一些明显的东西 控制器建议类: @Co

我正在使用Velocity Teamplets开发SpringMVC4.1应用程序。我正在尝试获取资源处理设置。本教程记录了我想要的内容:

但是,ResourceUrlAdvice会引发一个错误,即未定义ResourceUrlProvider。我认为ResourceUrlProvider应该由@EnableWebMvc自动定义(我没有使用SpringBoot)

我甚至尝试在我的MvcConfig类中显式声明@Bean,但它仍然抛出了一个错误。我觉得我错过了一些明显的东西

控制器建议类:

@ControllerAdvice
public class ResourceUrlAdvice {

    @Autowired private ResourceUrlProvider resourceUrlProvider;

    @ModelAttribute("urls")
    public ResourceUrlProvider urls() {
        return this.resourceUrlProvider;
    }

}
错误:

...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.servlet.resource.ResourceUrlProvider] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1308)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:527)
    ... 24 more
编辑:其他信息

MvcConfig.java:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.foo.controller" })
public class MvcConfig extends WebMvcConfigurerAdapter {

    private static final int CACHE_1_YEAR = 60 * 60 * 24 * 365; // 1 year, in seconds

    @Autowired private ResourceUrlProvider resourceUrlProvider;

    @Bean
    public VelocityConfigurer velocityConfigurer() {
        VelocityConfigurer vc = new VelocityConfigurer();
        vc.setResourceLoaderPath("/WEB-INF/pages/");
        return vc;
    }

    @Bean
    public VelocityViewResolver viewResolver(Environment env) {
        VelocityViewResolver vvr = new VelocityViewResolver();
        vvr.setCache(env.getRequiredProperty("velocity.cache", Boolean.class)); // TODO enable cache for prod
        vvr.setPrefix("");
        vvr.setSuffix(".vm");
        vvr.setToolboxConfigLocation("/WEB-INF/velocity-toolbox.xml");
        vvr.setExposeSpringMacroHelpers(true);
        return vvr;
    }

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Bean
    public CookieLocaleResolver localeResolver() {
        CookieLocaleResolver localResolver = new CookieLocaleResolver();
        localResolver.setDefaultLocale(Locale.ENGLISH);
        localResolver.setCookieName("lang");
        localResolver.setCookieMaxAge(CACHE_1_YEAR);
        return localResolver;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
        interceptor.setParamName("lang");
        return interceptor;
    }

    /*
     * @see org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter#addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry)
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        super.addInterceptors(registry);
        registry.addInterceptor(localeChangeInterceptor());
    }

    /*
     * @see org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter#addResourceHandlers(org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry)
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        super.addResourceHandlers(registry);

        VersionResourceResolver versionResourceResolver = new VersionResourceResolver().addVersionStrategy(new ContentVersionStrategy(), "/**");

        registry.addResourceHandler("/css/**")
        .addResourceLocations("/css/")
        .setCachePeriod(CACHE_1_YEAR)
        .resourceChain(true)
        .addResolver(versionResourceResolver);

        registry.addResourceHandler("/js/**")
        .addResourceLocations("/js/")
        .setCachePeriod(CACHE_1_YEAR)
        .resourceChain(true)
        .addResolver(versionResourceResolver);

        //      registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        //      registry.addResourceHandler("/js/**").addResourceLocations("/js/");
    }

}
pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.foo</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>My App</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
        <build.timestamp>${maven.build.timestamp}</build.timestamp>
        <spring.version>4.1.2.RELEASE</spring.version>
        <jackson.version>2.2.3</jackson.version>
        <wro.version>1.6.3</wro.version> <!-- Was unable to get to work with version 1.7.8 -->
    </properties>

    <dependencies>
        <!-- ********** J2EE ********** -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.xml.ws</groupId>
            <artifactId>jaxws-api</artifactId>
            <version>2.1</version>
        </dependency>

        <!-- ********** Spring ********** -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>3.0.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-ldap</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>

        <!-- ********** Web Optimization ********** -->
        <dependency>
            <groupId>ro.isdc.wro4j</groupId>
            <artifactId>wro4j-core</artifactId>
            <version>${wro.version}</version>
        </dependency>
        <dependency>
            <groupId>ro.isdc.wro4j</groupId>
            <artifactId>wro4j-extensions</artifactId>
            <version>${wro.version}</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>webjars-locator</artifactId>
            <version>0.28</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.tuckey</groupId>
            <artifactId>urlrewritefilter</artifactId>
            <version>4.0.3</version>
        </dependency>

        <!-- ********** Templating ********** -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-tools</artifactId>
            <version>2.0</version>
        </dependency>

        <!-- ********** CSV ********** -->
        <dependency>
            <groupId>net.sf.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>2.3</version>
        </dependency>

        <!-- ********** Dozer ********** -->
        <dependency>
            <groupId>net.sf.dozer</groupId>
            <artifactId>dozer</artifactId>
            <version>5.5.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>jcl-over-slf4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- ********** Database ********** -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>12.1.0.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>

        <!-- ********** Logging ********** -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!-- ********** Testing ********** -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.9.5</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

4.0.0
com.foo
我的应用程序
1.0.0-SNAPSHOT
战争
我的应用程序
http://maven.apache.org
UTF-8
UTF-8
yyyy MM dd HH:MM
${maven.build.timestamp}
4.1.2.1发布
2.2.3
1.6.3 
javax.servlet
javax.servlet-api
3.1.0
假如
javax.xml.ws
JAXWSAPI
2.1
org.springframework
SpringWebMVC
${spring.version}
org.springframework
SpringJDBC
${spring.version}
org.springframework
spring上下文支持
3.0.5.1发布
org.springframework.security
spring安全内核
3.2.0.1发布
org.springframework.security
spring安全ldap
3.2.0.1发布
ro.isdc.wro4j
wro4j型芯
${wro.version}
ro.isdc.wro4j
wro4j扩展
${wro.version}
org.webjars
webjars定位器
0.28
运行时
org.tuckey
URL重写过滤器
4.0.3
org.apache.velocity
速度
1.7
org.apache.velocity
速度工具
2
net.sf.opencsv
opencsv
2.3
net.sf.推土机
推土机
5.5.1
org.slf4j
jcl-over-slf4j
com.oracle
ojdbc6
12.1.0.1.0
org.hsqldb
hsqldb
2.3.3
c3p0
c3p0
0.9.1.2
log4j
log4j
1.2.17
朱尼特
朱尼特
4.11
测试
org.mockito
莫基托磁芯
1.9.5
测试
org.springframework
弹簧试验
${spring.version}
测试
${project.artifactId}
org.apache.maven.plugins
maven编译器插件
3.1
1.8
1.8

是的,这个bean应该自动注册到EnableWebMvc(请参阅)。您能展示一下您的pom+spring配置类吗?