The content of this article is an introduction to the method of injecting Bean by SpringBoot interceptor (code example). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
Due to business needs, the Redis cache needs to be operated in the interceptor. According to the controller and service layer configuration, it is found that it cannot be injected, and a null pointer exception is always reported.
Solution
@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); } }
Interceptor:
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 { } }
Query reason
The interceptor is executed in the Bean This problem occurs before initialization. The execution order of each element in web.xml is as follows, context-param-->listener-->filter-->servlet; and the interceptor is configured in Spring MVC. If you look at the entire project , the execution process of a servlet request becomes like this context-param-->listener-->filter-->servlet-->interceptor, why the interceptor is after the servlet is executed, because the interceptor itself is Inside the servlet.
Concept
Servlet: A servlet is a java application that runs on the server side, is platform- and protocol-independent, and can be dynamic Generating web pages, it works in the middle layer between client requests and server responses.
filter: filter is a reusable code fragment that can be used to transform HTTP requests, responses and header information. Filter is not like Servlet, it cannot generate a request or response, it only modifies the request for a certain resource, or modifies the response from a certain resource.
listener: Listener, literally it can be seen that listener is mainly used for listening. Through the listener, you can monitor an execution action in the web server and respond accordingly according to its requirements. In layman's terms, it is a functional component that automatically executes code when the application, session, and request objects are created and destroyed or when attributes are added, modified, or deleted.
interceptor: The interceptor is a more detailed application of the filter. It can be applied not only before and after the service method but also before and after the interceptor of other methods.
The above is the detailed content of Introduction to the method of interceptor injecting beans in SpringBoot (code example). For more information, please follow other related articles on the PHP Chinese website!