## Spring AOP ANNOTATION 监控方法执行时间 - 源码中提供了CatAnnotation 以及 CatAopService 这两个类 - spring的xml中添加com.dianping.cat.aop.CatAopService 以及 aop:aspectj-autoproxy - 在监控的bean的方法上添加CatAnnotation - cat不推荐使用aop方法埋点,会有少量性能损耗,推荐使用api,这样type和name以及成功状态可以更加灵活 - 业务也可以将此jar两个文件copy到自己的项目工程,这样可以少引入一个jar具体的可以参考如下源码 ### spring的配置文件 ``` ``` #### 其他参考源码 ``` package com.dianping.cat.aop; public interface UserService { @CatAnnotation //此处增加annotation public void delete(Object entity); @CatAnnotation //此处增加annotation public void getAllObjects(); @CatAnnotation //此处增加annotation public void save(Object entity); @CatAnnotation //此处增加annotation public void update(Object entity); } ``` ``` package com.dianping.cat.aop; public class UserServiceImpl implements UserService { @Override public void delete(Object entity) { sleep(30); System.out.println("UserServiceImpl---删除方法:delete()---"); } @Override public void getAllObjects() { sleep(40); System.out.println("UserServiceImpl---查找所有方法:getAllObjects()---"); } @Override public void save(Object entity) { sleep(10); System.out.println("UserServiceImpl---保存方法:save()---"); } private void sleep(int time) { try { Thread.sleep(time); } catch (Exception e) { } } @Override public void update(Object entity) { sleep(20); System.out.println("UserServiceImpl---更新方法:update()---"); } } ``` ``` package com.dianping.cat.aop; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AdviseTest { @SuppressWarnings("resource") @Test public void testUser() throws InterruptedException { ApplicationContext context = new ClassPathXmlApplicationContext("spring-aspectjs.xml"); UserService userService = context.getBean("userServiceImpl", UserService.class); for (int i = 0; i < 1000; i++) { userService.save(null); userService.update(null); userService.delete(null); userService.getAllObjects(); } Thread.sleep(1000); } } ```