> Java > java지도 시간 > 본문

SpringBoot에서 인터셉터가 Bean을 주입하는 방법 소개(코드 예)

不言
풀어 주다: 2019-02-16 11:59:55
앞으로
3188명이 탐색했습니다.

이 글은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!