gpt4 book ai didi

SpringMVC记录我遇到的坑_AOP注解无效,切面不执行的解决

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章SpringMVC记录我遇到的坑_AOP注解无效,切面不执行的解决由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

AOP注解无效,切面不执行的解决

想做一个api请求日志,想到使用aop,配置过程中遇到了一个坑,aop不起作用, 。

我的aop是这样的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.ljwm.ibei.aspact;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
 
/**
  * Created by user on 2017/9/8.
  */
@Aspect
@Configuration
public class ApiRequestLog {
     private Logger _log = LoggerFactory.getLogger(ApiRequestLog. class );
     @Around ( "execution(* com.ljwm.ibei.controller.*.*(..))" )
     public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
         RequestAttributes ra = RequestContextHolder.getRequestAttributes();
         ServletRequestAttributes sra = (ServletRequestAttributes) ra;
         HttpServletRequest request = sra.getRequest();
 
         String url = request.getRequestURL().toString();
         String method = request.getMethod();
         String uri = request.getRequestURI();
         String queryString = request.getQueryString();
         _log.debug( "请求开始, 各个参数, url: {}, method: {}, uri: {}, params: {}" , url, method, uri, queryString);
         Object result = pjp.proceed();
         return result;
     }
}

配置文件分成applicationContext.xml、applicationContext-mvc.xml还有mybatis和shiro的 。

web.xml配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
< web-app xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
           http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
          version = "3.0" >
   < display-name >Archetype Created Web Application</ display-name >
 
   < filter >
     < filter-name >shiroFilter</ filter-name >
     < filter-class >org.springframework.web.filter.DelegatingFilterProxy</ filter-class >
     < init-param >
       < param-name >targetFilterLifecycle</ param-name >
       < param-value >true</ param-value >
     </ init-param >
   </ filter >
   < filter-mapping >
     < filter-name >shiroFilter</ filter-name >
     < url-pattern >/*</ url-pattern >
   </ filter-mapping >
   < servlet >
     < servlet-name >spring-dispatcher</ servlet-name >
     < servlet-class >
       org.springframework.web.servlet.DispatcherServlet
     </ servlet-class >
     < init-param >
       < param-name >contextConfigLocation</ param-name >
       < param-value >classpath:spring/applicationContext-mvc.xml</ param-value >
     </ init-param >
     < load-on-startup >1</ load-on-startup >
   </ servlet >
   < servlet-mapping >
     < servlet-name >spring-dispatcher</ servlet-name >
     < url-pattern >/</ url-pattern >
   </ servlet-mapping >
   < context-param >
     < param-name >contextConfigLocation</ param-name >
     < param-value >classpath:spring/applicationContext*.xml</ param-value >
   </ context-param >
   < filter >
     < filter-name >characterEncodingFilter</ filter-name >
     < filter-class >org.springframework.web.filter.CharacterEncodingFilter</ filter-class >
     < init-param >
       < param-name >encoding</ param-name >
       < param-value >UTF-8</ param-value >
     </ init-param >
     < init-param >
       < param-name >forceEncoding</ param-name >
       < param-value >true</ param-value >
     </ init-param >
   </ filter >
   < filter-mapping >
     < filter-name >characterEncodingFilter</ filter-name >
     < url-pattern >/*</ url-pattern >
   </ filter-mapping >
   < listener >
     < listener-class >org.springframework.web.context.ContextLoaderListener</ listener-class >
   </ listener >
   < listener >
     < listener-class >org.springframework.web.context.request.RequestContextListener</ listener-class >
   </ listener >
   < listener >
     < listener-class >com.ljwm.ibei.listener.ContextFinalizer</ listener-class >
   </ listener >
</ web-app >

我把<aop:aspectj-autoproxy proxy-target-class="true"/>写在applicationContext中,把<context:component-scan> 和 <mvc:annotation-driven>写在applicationContext-mvc中,发现aop没有执行,后来经过尝试发现,因为在初始化DispatchServlet的时候加载了mvc的配置,但是aop的代理却没有加载,导致其不能执行,我猜测是因为spring默认bean是单例的, 。

对已经初始化的bean容器不在做后续处理,由于是先加载的mvc所以是aop失效,我把aop代理的那个放到mvc中,aop就能执行了,不知道我的猜测对不对,还望大神赐教 。

另一个问题:

springmvc在controller层使用aop切面不成功解决

需要在配置文件中加入

?
1
<aop:aspectj-autoproxy proxy-target- class = "true" />

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/z781582206/article/details/77894774 。

最后此篇关于SpringMVC记录我遇到的坑_AOP注解无效,切面不执行的解决的文章就讲到这里了,如果你想了解更多关于SpringMVC记录我遇到的坑_AOP注解无效,切面不执行的解决的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com