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
}