分享

采用spring AOP 和注解解决日志

 昵称13366901 2013-08-01

首先创建一个自定义注解

Java代码  收藏代码
  1. @Target({ElementType.METHOD})  
  2. @Retention(RetentionPolicy.RUNTIME)  
  3. public @interface RecordLog {  
  4.       
  5. }  

 然后采用spring Aop

Java代码  收藏代码
  1. @Component("logAround")  
  2. public class LogAroundInterceptor implements MethodInterceptor {  
  3.     @Autowired  
  4.     private SysLogService sysLogService;  
  5.     private final Logger logger = Logger.getLogger(LogAroundInterceptor.class);  
  6.   
  7.     public Object invoke(MethodInvocation invocation) throws Throwable {  
  8.         // TODO Auto-generated method stub  
  9.         Object returnObject = invocation.proceed();  
  10.         Method method = invocation.getMethod();  
  11.         if (method.isAnnotationPresent(RecordLog.class)) {  
  12.             Object[] arguments = invocation.getArguments();  
  13.             Object saveObject = null;  
  14.             SysLog sysLog = new SysLog();  
  15.             if (null != arguments) {  
  16.                 saveObject = arguments[0];  
  17.                 sysLog = getSysLog(getOperaType(method.getName()), saveObject);  
  18.                 sysLogService.saveSysLog(sysLog);  
  19.             }  
  20.         }  
  21.         return returnObject;  
  22.     }  
  23.   
  24.     public int getOperaType(String methodName) {  
  25.         int type = 0;  
  26.         if (methodName.startsWith("save") || methodName.startsWith("add")  
  27.                 || methodName.startsWith("insert")  
  28.                 || methodName.startsWith("update")) {  
  29.             type = 1;  
  30.         } else if (methodName.startsWith("delete")  
  31.                 || methodName.startsWith("del")) {  
  32.             type = 2;  
  33.         }  
  34.         return type;  
  35.     }  
  36.   
  37.     public SysLog getSysLog(int type, Object object) {  
  38.         SysLog sysLog = new SysLog();  
  39.         sysLog.setCreateTime(new Date());  
  40.         StringBuffer sysContent = new StringBuffer();  
  41.         if (type != 1 && type != 2) {  
  42.             logger.warn("此方法不能被记录日志");  
  43.             return null;  
  44.         }  
  45.         if (object instanceof User) {  
  46.             User user = (User) object;  
  47.             sysContent.append("用户:");  
  48.             if (type == 1) {  
  49.                 sysContent.append(user.getUsername()).append("被保存.");  
  50.             } else if (type == 2) {  
  51.                 sysContent.append(user.getDeleteUser()).append(  
  52.                         "删除了用户:"   user.getUniqueUserName());  
  53.             }  
  54.         } else if (object instanceof Tribe) {  
  55.             Tribe tribe = (Tribe) object;  
  56.             if (type == 1) {  
  57.                 sysContent.append("用户:").append(  
  58.                         tribe.getUser().getUniqueUserName()).append("保存了部落:")  
  59.                         .append(tribe.getName());  
  60.             } else if (type == 2) {  
  61.                 sysContent.append("用户:").append(tribe.getDeleteUser()).append(  
  62.                         "删除了部落:").append(tribe.getUniqueTribeName());  
  63.             }  
  64.         } else if (object instanceof Assessment) {  
  65.             Assessment assessment = (Assessment) object;  
  66.             int assType = assessment.getType();  
  67.             User user = assessment.getUserByUserId();  
  68.             sysContent.append("用户:").append(user.getUniqueUserName()).append(  
  69.                     "举报了");  
  70.             if (assType == 1) {  
  71.                 sysContent.append("资源").append(  
  72.                         assessment.getResource().getTitle());  
  73.             } else if (assType == 2) {  
  74.                 sysContent.append("部落").append(  
  75.                         assessment.getTribeByAccTribeId().getUniqueTribeName());  
  76.             } else if (assType == 3) {  
  77.                 sysContent.append("人").append(  
  78.                         assessment.getUserByUserId().getUniqueUserName());  
  79.             }  
  80.         } else if (object instanceof Role) {  
  81.             Role role = (Role) object;  
  82.             sysContent.append("用户:").append(role.getOperaUser());  
  83.             if (type == 1) {  
  84.                 sysContent.append("保存了").append(role.getRoleName());  
  85.             } else if (type == 2) {  
  86.                 sysContent.append("删除了").append(role.getRoleName());  
  87.             }  
  88.         } else if (object instanceof Resource) {  
  89.             Resource res = (Resource) object;  
  90.             boolean isPass = res.getAppStatus() == 1;  
  91.             sysContent.append("一级审核人员:").append(res.getAppUser().getUniqueUserName());  
  92.             sysContent.append("审核").append(res.getUniqueResName());  
  93.             if (!isPass) {  
  94.                 sysContent.append("未通过");  
  95.             } else if (isPass) {  
  96.                 sysContent.append("通过");  
  97.             }  
  98.         }  
  99.         logger.info(sysContent.toString());  
  100.         sysLog.setContent(sysContent.toString());  
  101.         return sysLog;  
  102.     }  
  103. }  

 在需要插入注解的方法上面写上@RecordLog就可以啦

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多