发表于: 2017-11-08 23:20:43

1 737


今日完成的事情:

今天把aop切面搞定,首先配置在service层,service层是调用是统计调用DB的时间,

首先spring的配置:

然后,是切面的方法:

运行结果:

在这里可以看到调用DB用了359毫秒。

其次在controller,查看调用controller用了多少时间:

@Aspect
@Component
public class TimeHandle {
   private Logger logger = Logger.getLogger(TimeHandle.class);

   @Around(value = "execution(* com.mmy.controller.UserController.*(..))")
   public Object aroundController(ProceedingJoinPoint pjp) throws Throwable {
       long startTime=System.currentTimeMillis();
       Object result=pjp.proceed();
       long endTime=System.currentTimeMillis();
       logger.info("调用了controller方法"+"共耗时"+(endTime-startTime)+"毫秒");
       System.out.println("调用了controller方法"+"共耗时"+(endTime-startTime)+"毫秒");
       return result;
      }
   @Before(value = "execution(* com.mmy.controller.UserController.*(..))")
   public void beforeController() {
       System.out.println("开始统计controller处理时间");
   }
}

然后是处理结果:

在这里成功跑出来,但是这里有一个问题,应该是我的配置还是有问题,就是调用controller层的时候,应该也调用了数据库,但是这里却没有统计出来数据库的用时。这里我自己也不是很明白。

还有今天这个配置文件真是搞了好久,然后贴出来一段自己百度的:

(部分借鉴)CGLIB代理配置在了applicationContext.xml 核心配置文件中,该配置文件会被ContextLoaderListenerclass加载,Spring会创建一个WebApplicationContext上下文,称为父上下文(父容器) ,保存在ServletContext中,key为WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE的值。

而spring-mvc.xml是DispatcherServlet,可以同时配置多个,每个 DispatcherServlet有一个自己的上下文对象(WebApplicationContext),称为子上下文(子容器),子上下文可以访问父上下文中的内容,但父上下文不能访问子上下文中的内容。 它也保存在 ServletContext中,key是”org.springframework.web.servlet.FrameworkServlet.CONTEXT”+Servlet名称

当spring加在父容器的时候就会去找切入点,但是这个时候切入的controller是在子容器中的,父容器是无法访问子容器,所以就拦截不到。如果将上述的配置文件放到spring-mvc.xml中,那么问题就解决了。我已经测试可以通过URL访问触发切点了。

这几句话,说明了配置文件的加载顺序,然后自己算是解决了问题。

但是这里还是有疑问,就是只有springMVC里面有aoc的配置的话,那么service是切不到的。今天还是有好多疑问,感觉这些是逻辑上,自己有点脑子不够用了,明天请教一下师兄。

明日计划的事情:

明天把aop的疑问解决了,然后任务三基本就差不多了。

遇到的问题:

aop虽然配置成功,但是一些逻辑上有些问题,需要请教师兄。

收获:

对配置文件加载顺序以及aop都有了一些新的认识。

任务开始时间:2017/11/3

预计完成时间:2017/11/10

延期:无

禅道:http://task.ptteng.com/zentao/my-task.html




返回列表 返回列表
评论

    分享到