首页 > 解决方案 > 尝试在spring-mvc上的应用程序中注册配置时出错?

问题描述

spring-mvc+ tomcat上的应用(无spring-boot)

有项目结构: 在此处输入图像描述

因此,当我尝试将战争部署到本地 tomcat 时,出现错误消息

引起:java.lang.NoClassDefFoundError: org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory.(ReflectiveAspectJAdvisorFactory.java:77) 中的 org/aspectj/lang/annotation/Around 在 org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator .initBeanFactory(AnnotationAwareAspectJAutoProxyCreator.java:78) at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.setBeanFactory(AbstractAdvisorAutoProxyCreator.java:60) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1648 ) 在 org.springframework.beans.factory.support 的 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1617)。AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ... 56 更多原因:java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java: 1291) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119) ... 62 更多

package init;

    @Configuration
    @EnableWebMvc
    @ComponentScan("com")
    public class WebAppInitalizer implements WebApplicationInitializer {
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
            rootContext.register(
                    WebConfig.class);

            FilterRegistration charEncodingfilterReg = servletContext.addFilter("CharacterEncodingFilter", CharacterEncodingFilter.class);
            charEncodingfilterReg.setInitParameter("encoding", "UTF-8");
            charEncodingfilterReg.setInitParameter("forceEncoding", "true");
            charEncodingfilterReg.addMappingForUrlPatterns(null, false, "/*");

            servletContext.addListener(new ContextLoaderListener(rootContext));

            ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(rootContext));
            dispatcher.setLoadOnStartup(1);
            dispatcher.addMapping("/*");
        }
    }

网络配置

@Configuration
@ComponentScan(basePackages = {"com"})
@EnableWebMvc
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new MappingJackson2HttpMessageConverter());
        converters.add(new StringHttpMessageConverter());
    }

    @Bean
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        RequestMappingHandlerMapping mhm = new RequestMappingHandlerMapping();
        //suffix parser is off for urls like .../search/timeKey.key:some_key
        mhm.setUseSuffixPatternMatch(false);
        return mhm;
    }
}

和控制器:

@RestController
public class GreetingController {
    @RequestMapping(value = "/greeting", method = RequestMethod.GET)
    public String greeting() {
        return "greeting";
    }
}

applicationContext.xml 和 web.xml 为空。因此,尝试在 WebAppInitializer 中注册 WebConfig 时会发生错误。

标签: spring-mvctomcat

解决方案


添加

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.3.16.RELEASE</version>
    </dependency>

解决了我的问题。


推荐阅读