この記事の内容は、SpringBoot インターセプターによる Bean の注入方法 (コード例) の紹介です。必要な方は参考にしていただければ幸いです。
ビジネス上のニーズにより、Redis キャッシュをインターセプターで操作する必要があります。コントローラーとサービス層の構成によれば、キャッシュを注入できないことが判明し、常に null ポインター例外が報告されます。
解決策
@Configuration public class MyWebAppConfigurer extends WebMvcConfigurerAdapter { /** * 将自定义拦截器作为Bean写入配置 * @return */ @Bean public SysInterceptor sysInterceptor() { return new SysInterceptor(); } /** * 对拦截器注册 */ @Override public void addInterceptors(InterceptorRegistry registry) { String[] patterns = new String[] {"/swagger-resources/**"}; registry.addInterceptor(sysInterceptor()) .addPathPatterns("/**") .excludePathPatterns(patterns); super.addInterceptors(registry); } }
インターセプタ:
public class SysInterceptor implements HandlerInterceptor { private static final Logger logger = LoggerFactory.getLogger(SysInterceptor.class); @Autowired private RedisTemplate<String, String> redisTemplate; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //业务逻辑 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
クエリ理由
インターセプタはBean内で実行されます。この問題は初期化前に発生します。 web.xml の各要素の実行順序は context-param-->listener-->filter-->servlet; となっており、Spring MVC ではインターセプタが設定されています。サーブレット リクエストの実行プロセスは次のようになります。 context-param-->listener-->filter-->servlet-->interceptor。なぜインターセプタがサーブレットの実行後にあるのかというと、インターセプタ自体が内部にあるためです。サーブレット。
概念
サーブレット: サーブレットはサーバー側で実行される Java アプリケーションであり、プラットフォームやプロトコルに依存せず、次のことができます。 Web ページを動的に生成する場合、クライアントのリクエストとサーバーの応答の間の中間層で機能します。
filter: フィルターは、HTTP リクエスト、レスポンス、およびヘッダー情報を変換するために使用できる再利用可能なコード フラグメントです。サーブレットとは異なり、フィルターはリクエストやレスポンスを生成できません。特定のリソースに対するリクエストを変更するか、特定のリソースからのレスポンスを変更するだけです。
listener: リスナー、文字通り、リスナーは主にリスニングに使用されることがわかります。リスナーを通じて、Web サーバーの実行アクションを監視し、その要件に従って応答できます。平たく言えば、アプリケーション、セッション、リクエストのオブジェクトが作成および破棄されるとき、または属性が追加、変更、または削除されるときに、コードを自動的に実行する機能コンポーネントです。
インターセプター: インターセプターは、フィルターのより詳細な適用です。サービス メソッドの前後だけでなく、他のメソッドのインターセプターの前後にも適用できます。
以上がSpringBootインターセプタによるBean注入方法の紹介(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。