Ce que cet article vous apporte est une introduction à la méthode d'injection de beans par les intercepteurs SpringBoot (exemples de code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
En raison des besoins de l'entreprise, le cache Redis doit être exploité dans l'intercepteur. Selon la configuration du contrôleur et de la couche de service, il s'avère qu'il ne peut pas être injecté et une exception de pointeur nul est toujours signalée.
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); } }
Intercepteur :
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 { } }
Raison de la requête
Interception Le problème est dû au fait que l'implémenteur est exécuté avant l'initialisation du bean. L'ordre d'exécution de chaque élément dans web.xml est le suivant, context-param-->listener-->filter-->servlet; et l'intercepteur est configuré dans Spring MVC. le processus d'exécution d'une requête de servlet devient comme ceci context-param-->listener-->filter-->servlet-->interceptor, pourquoi l'intercepteur est après l'exécution du servlet, car l'intercepteur lui-même est à l'intérieur la servlet.
Concept
Servlet : un servlet est une application Java qui s'exécute côté serveur, est indépendante de la plate-forme et du protocole et peut être dynamique En générant des pages Web, il fonctionne dans la couche intermédiaire entre les demandes des clients et les réponses du serveur.
filter : le filtre est un fragment de code réutilisable qui peut être utilisé pour transformer les requêtes HTTP, les réponses et les informations d'en-tête. Le filtre n'est pas comme le servlet, il ne peut pas générer de requête ou de réponse, il modifie uniquement la requête d'une certaine ressource, ou modifie la réponse d'une certaine ressource.
auditeur : Auditeur : Du sens littéral, on peut voir que l'auditeur est principalement utilisé pour écouter. Grâce à l'écouteur, vous pouvez surveiller une action d'exécution sur le serveur Web et répondre en conséquence en fonction de ses exigences. En termes simples, il s'agit d'un composant fonctionnel qui exécute automatiquement du code lorsque les objets d'application, de session et de requête sont créés et détruits ou lorsque des attributs sont ajoutés, modifiés ou supprimés.
intercepteur : Interceptor est une application plus détaillée de filtres. Il peut être appliqué non seulement avant et après la méthode de service, mais également avant et après l'intercepteur d'autres méthodes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!