1.問題の説明
プロジェクトの開始後、インターセプターの下のインジェクションはnullになり、インターセプターの論理操作に影響します。以下に示すように:
第二に、ソリューション戦略
理由: springcontextが作成される前にインターセプターのロードが完了している詳細については、スプリングインターセプターのロードプロセスとIOCの関係を参照してください。
解決策1:インターセプターが初期化される前に@Beanを使用してクラスをロードします。焦点は、@ Beanのインターセプター処理とgetCheckFilter()の導入です。
詳細は次のとおりです。
// 拦截器处理
public class CheckFilter implements HandlerInterceptor {
@Autowired
private SystemService systemService;
}
// 配置类处理
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Bean
public CheckFilter getCheckFilter(){
return new CheckFilter();
}
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getCheckFilter()).addPathPatterns("/**").
excludePathPatterns("/admin/auth/**");
super.addInterceptors(registry);
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
super.addResourceHandlers(registry);
}
@Override
protected void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/",".jsp");
super.configureViewResolvers(registry);
}
}
解決策2:@ Configuration、@ Componentなどの構成アノテーションをインターセプターに 追加します。構成クラスに挿入します。具体的な操作は次のとおりです。
// 拦截器处理
@Configuration //或者 @Component
public class CheckFilter implements HandlerInterceptor {
@Autowired
private SystemService systemService;
}
// 配置类处理
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Autowired
private CheckFilter checkFilter;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(checkFilter).addPathPatterns("/**").
excludePathPatterns("/admin/auth/**");
super.addInterceptors(registry);
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
super.addResourceHandlers(registry);
}
@Override
protected void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/",".jsp");
super.configureViewResolvers(registry);
}
}
3、知識の要約
1.スプリングのインターセプターローディングプロセスとIOC管理を含む
2.参考資料https://blog.csdn.net/dengdeng333/article/details/87878882