发表于: 2017-11-08 23:20:43
1 738
今日完成的事情:
今天把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
评论