在Spring配置类中,方法是否添加@Bean注解
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
@Autowired
private JwtTokenAdminInterceptor jwtTokenAdminInterceptor;
@Autowired
private JwtTokenUserInterceptor jwtTokenUserInterceptor;
/**
* 注册自定义拦截器
* @param registry
*/
protected void addInterceptors(InterceptorRegistry registry) {
log.info("开始注册自定义拦截器...");
registry.addInterceptor(jwtTokenAdminInterceptor)
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin/employee/login");
registry.addInterceptor(jwtTokenUserInterceptor)
.addPathPatterns("/user/**")
.excludePathPatterns("/user/user/login")
.excludePathPatterns("/user/shop/status");
}
@Bean
public Docket docket1(){
log.info("准备生成接口文档...");
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.groupName("管理端接口")
.apiInfo(apiInfo)
.select()
//指定生成接口需要扫描的包
.apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin"))
.paths(PathSelectors.any())
.build();
return docket;
}
在Spring配置类中,方法是否添加@Bean注解主要取决于以下两个关键因素:
1,需要注册为Bean的方法(需加@Bean)
@Bean // 当需要将方法返回值注入Spring容器时添加
public Docket docket1(){
return new Docket(...); // 这个Docket对象需要被Spring管理
}
比如代码中的docket1()方法是第三方方法,它的返回值对象是需要被Spring管理的Swagger配置Bean,因此需要添加@Bean。
2,覆盖父类配置的方法(不加@Bean)
@Override
protected void addInterceptors(InterceptorRegistry registry) { // 来自WebMvcConfigurationSupport的模板方法
registry.addInterceptor(jwtTokenAdminInterceptor)... // 直接配置拦截器
}
像addInterceptors()、addResourceHandlers()、extendMessageConverters()这些方法:
是覆盖自WebMvcConfigurationSupport的模板方法
由Spring框架自动调用(非手动注入)
返回类型为void或不需要注册Bean
主要用于配置行为而非声明Bean
通过这种设计,既保留了Spring Boot的自动配置能力,又能通过@Bean显式声明需要容器管理的组件。