spring-mvc - 尝试在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 时会发生错误。
解决方案
添加
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.16.RELEASE</version>
</dependency>
解决了我的问题。
推荐阅读
- java - 如何在使用 Criteria API 的查询之间或之间进行操作
- spring-data - gremlin hasId 应该等同于 apache-tinkerpop-gremlin-console-3.3.4-bin.zip 中的 id().is(xxx)
- jasper-reports - jasper ireport 子报表变量或主报表变量 主报表变量 重复打印
- collectionview - 我想用最后一个collectionviewcell的maxY设置collectionview高度!但是为什么SE模拟器不起作用?
- rest - Nelmiobundles API doc 参数中资源参数的意义
- google-analytics - Bigquery 导出方案中的 IP 地址和过滤器记录在哪里?
- php - 从两个变量中获取所有基于 UUID 的材质
- java - 如何解决 Java 中的 InvalidUseOfMatchers 异常 - Mockito
- database - RichTextBox,突出显示在数据库中找不到的所有单词
- javascript - 堆积条形图:按类型和数量