HandlerInterceptor拦截器未生效

1 WebMvcConfigurationSupport源码其中有拦截器注册方法addInterceptors(InterceptorRegistry registry),所以在版本控制配置类中重写此方法添加拦截器,然后把这个拦截器注册到spring中。或者启动类添加@ServletComponentScan。

2 在确认以上配置正常还未生效,检查本地项目默认扫描路径,该配置类是否会被扫描到

3如果存在多个同类型拦截器 查看@Order调用顺序 是否冲突

启动类配置:

以下自动注册相关配置:

一、 @ServletComponentScan

在SpringBootApplication上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。

二、 @ComponentScan

Spring是一个依赖注入(dependency injection)框架。所有的内容都是关于bean的定义及其依赖关系。定义Spring Beans的第一步是使用正确的注解-@Component或@Service或@Repository.
但是,Spring不知道你定义了某个bean除非它知道从哪里可以找到这个bean.
ComponentScan做的事情就是告诉Spring从哪里找到bean。

包扫描会扫描只要标注了@Controller,@Service,@Repository,@Component这四个注解都会被扫描到容器中。
1、@Controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层
2、@Service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理
3、@Repository(实现dao访问)
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
4、@Component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Service等的时候),我们就可以使用@Component来标注这个类。

@Component和@Bean的区别如下:

作用对象不同:@Component注解作用于类,而@Bean注解作用于方法。
@Component通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。可以使用@ComponentScan注解定义要扫描的路径。
@Bean通常是在标有该注解的方法中定义产生这个bean,告诉Spring这是某个类的实例,当需要用它的时候还给我。@Bean注解的方法通常返回一个对象,这个对象会被注册为一个Bean。而且@Bean通常配合@Configuration注解使用。
自定义性:@Bean注解比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。比如当引用第三方库的类需要装配到Spring容器时,就只能通过@Bean来实现。
总的来说,@Component和@Bean都是用于定义bean的方式,都可以将对象存储到Spring的IoC容器中,但它们在作用对象、使用方式和自定义性方面有所不同。选择使用哪种注解,取决于具体的需求和场景

三、@EnableWebMvc @ServletComponentScan重复配置
报错问题解释:

@EnableWebMvc @ServletComponentScan 重复配置通常发生在Spring Boot应用中,当你在应用的配置类上使用@EnableWebMvc注解时,Spring Boot会自动配置Spring MVC。如果你同时在配置类上使用了@ServletComponentScan注解,并且你有一个或者多个使用@WebServlet或@WebFilter注解的自定义servlet或过滤器,这可能会导致配置的重复。

解决方法:

如果你想完全自定义Spring MVC配置,你应该只使用@EnableWebMvc注解。如果你需要扫描Servlet组件,那么只需要使用@ServletComponentScan注解。

如果你想使用Spring Boot的自动配置同时自定义一些配置,那么你应该只使用@EnableWebMvc而不要在配置类上使用@ServletComponentScan。然后,你可以通过继承WebMvcConfigurer接口来自定义配置。

确保你没有在应用的多个配置类中重复使用这些注解。

/ 如果你想使用Spring Boot的自动配置,只需要这样:
@Configuration
public class WebConfig implements WebMvcConfigurer {
    // 在这里添加自定义配置
}
 
// 如果你需要扫描Servlet组件,使用这样的配置:
@Configuration
@ServletComponentScan(basePackages = "com.example.myapp.servlet")
public class ServletComponentConfig {
    // 这里不应该有@EnableWebMvc
}

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值