이 글은 SpringBoot의 인터셉터(코드 예제)에 의한 빈 삽입 방법에 대한 소개입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.
비즈니스 요구로 인해 Redis 캐시는 인터셉터에서 작동해야 하며 컨트롤러 및 서비스 계층 구성에 따라 주입할 수 없는 것으로 확인되었으며 항상 null 포인터 예외가 보고됩니다.
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 the 이유
Bean이 초기화되기 전에 인터셉터가 실행되어 이러한 문제가 발생합니다. web.xml의 각 요소의 실행 순서는 context-param-->listener-->filter-->servlet; 이며 Interceptor는 Spring MVC에서 구성되어 있습니다. 서블릿 요청의 실행 프로세스는 다음과 같습니다. context-param-->listener-->filter-->servlet-->인터셉터, 인터셉터 자체가 내부에 있기 때문에 인터셉터가 서블릿이 실행된 이후에 있는 이유 서블릿.
Concept
서블릿은 서버 측에서 실행되는 Java 애플리케이션으로, 플랫폼 및 프로토콜에 독립적이라는 특성을 가지며 웹 페이지 중간에서 작동합니다. 클라이언트 요청 및 서버 응답 계층.
filter: 필터는 HTTP 요청, 응답 및 헤더 정보를 변환하는 데 사용할 수 있는 재사용 가능한 코드 조각입니다. 필터는 서블릿과 달리 요청이나 응답을 생성할 수 없으며 특정 리소스에 대한 요청만 수정하거나 특정 리소스의 응답을 수정합니다.
listener: Listener. 문자 그대로의 의미로 보면 Listener는 주로 듣기에 사용된다는 것을 알 수 있습니다. 리스너를 통해 웹 서버의 실행 작업을 모니터링하고 해당 요구 사항에 따라 적절하게 응답할 수 있습니다. 대중적으로는 애플리케이션, 세션, 요청 세 가지 개체가 생성 및 소멸되거나 속성이 추가, 수정, 삭제될 때 자동으로 코드를 실행하는 기능적 구성 요소입니다.
인터셉터: 인터셉터는 필터를 보다 세부적으로 적용한 것입니다. 서비스 방식의 전후뿐만 아니라 다른 방식의 인터셉터 전후에도 적용할 수 있습니다.
위 내용은 SpringBoot에서 인터셉터가 Bean을 주입하는 방법 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!