【运用SprngAOP进行日志管理,但是统计不到controller类里的方法 _aop 】 | IT修真院·坑乎
问题已收录 运用SprngAOP进行日志管理,但是统计不到controller类里的方法
我也踩过这个坑( 5 )
已统计您的踩坑,无需重复点击
回答(7)
aop
详细描述
错误截图
编辑于2024-04-19
  • [荣耀师兄]袁磊
    6

    SSM在项目运行时,首先会加载web.xml.

        其中web.xml里的加载顺序如下:

        1,applicationContext.xml(上下文<context-param>);

        2,listener(监听器);

        3,filter(过滤器);

        4,servlet(在web服务器上运行的程序,前端控制器DispatcherServlet,初始化Springmvc.xml,

          拦截器);

       Spring做的工作:

      application.xml:加载上下文相关的解析器<context:property-placeholder>,上下文内容扫描除了controller类其他都扫,配置dataSource,配置sqlSessionFactory,扫描mapper。

        springmvc.xml:  

        扫描controller,配置处理器映射器,处理器适配器和视图解析器

       mybatis:建立接口mapper的实现配置,mapper.xml.

     web.xml:

      配置springmvc的前端控制器,springmvc配置文件的位置,加载spring容器。

       经过以上分析就能知道为什么当AOP的切入点设置在controller类里时为什么其配置文件不能设置在application.xml里了.由web.xml的加载顺序可知程序先加载application.xml,但是那时程序上下文中还不包含controller类,所以aop的配置是不起作用,当程序加载到servlet时,程序上下文中才加载了controller类,所以AOP的配置文件应该配置在springmvc.xml中.


    编辑于2019-07-13
  • [深圳|结业弟子]JAVA----
    0

    选择好切点点位置:

    private static final String POINT = "execution (* com.*.*.*(..))";

        //对切点方法进行增强

        @Around(POINT)

    public Object timeController(ProceedingJoinPoint pjp)

    在POINT定义好需要切入的位置;


    还有在Spring-MVC中加入:

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


    编辑于2018-10-20
  • [西安|结业弟子]JAVA-鲁伯良
    0

    springmvc.xml文件里面扫描controller,和server,

    编辑于2018-12-15
  • [西安|结业弟子]JAVA-蔡凯
    0
    编辑于2024-02-26
  • [郑州|散修弟子]JAVA-7161
    0

    没有找到controller层  说明切点没有写对  或者配置文件没有扫描

    编辑于2019-06-28
  • [上海|]JAVA-
    0

        首先是切点位置的选择,如果使用的是工具类的方式,记得注入方法,applicationContext获取 然后getbean来完成包装后方法的类,然后进行使用。记得不要忘记开启注解扫描,注解还是需要的。

    编辑于2019-07-08
  • [成都|]JAVA-
    0

    贴一篇自己的AOP文件配置,这里我之前也遇到过,是因为切入到的实现类不正确,尤其要主要@Pointcut的那个地方.后面那句话一定要注意有没有到实现类中.

    @Aspect
    @Component
    public class serviceAOP {
    @Pointcut("execution(* com.jnshu.service..*Impl.*(..))")
    public void serviceAspect(){}

    @Around(value = "serviceAspect()")
    public Object log(ProceedingJoinPoint pjp) throws Throwable {
    Logger logger = LogManager.getLogger(pjp.getTarget());
           String className = pjp.getTarget().getClass().getName();
           String methodName = pjp.getSignature().getName();

           logger.info("start active:{}{} method",className,methodName);

           long startTime = System.currentTimeMillis();

           Object obj = pjp.proceed();

           long endTime = System.currentTimeMillis();

           logger.info("return:{},excution time:{}ms",obj,endTime-startTime);

           return obj;
       }
    }


    编辑于2019-08-13