采用spring AOP 和注解解决日志
来源:互联网 发布:开学啦软件多少钱 编辑:程序博客网 时间:2024/06/11 07:36
首先创建一个自定义注解
- @Target({ElementType.METHOD})
- @Retention(RetentionPolicy.RUNTIME)
- public @interface RecordLog {
- }
然后采用spring Aop
- @Component("logAround")
- public class LogAroundInterceptor implements MethodInterceptor {
- @Autowired
- private SysLogService sysLogService;
- private final Logger logger = Logger.getLogger(LogAroundInterceptor.class);
- public Object invoke(MethodInvocation invocation) throws Throwable {
- // TODO Auto-generated method stub
- Object returnObject = invocation.proceed();
- Method method = invocation.getMethod();
- if (method.isAnnotationPresent(RecordLog.class)) {
- Object[] arguments = invocation.getArguments();
- Object saveObject = null;
- SysLog sysLog = new SysLog();
- if (null != arguments) {
- saveObject = arguments[0];
- sysLog = getSysLog(getOperaType(method.getName()), saveObject);
- sysLogService.saveSysLog(sysLog);
- }
- }
- return returnObject;
- }
- public int getOperaType(String methodName) {
- int type = 0;
- if (methodName.startsWith("save") || methodName.startsWith("add")
- || methodName.startsWith("insert")
- || methodName.startsWith("update")) {
- type = 1;
- } else if (methodName.startsWith("delete")
- || methodName.startsWith("del")) {
- type = 2;
- }
- return type;
- }
- public SysLog getSysLog(int type, Object object) {
- SysLog sysLog = new SysLog();
- sysLog.setCreateTime(new Date());
- StringBuffer sysContent = new StringBuffer();
- if (type != 1 && type != 2) {
- logger.warn("此方法不能被记录日志");
- return null;
- }
- if (object instanceof User) {
- User user = (User) object;
- sysContent.append("用户:");
- if (type == 1) {
- sysContent.append(user.getUsername()).append("被保存.");
- } else if (type == 2) {
- sysContent.append(user.getDeleteUser()).append(
- "删除了用户:" + user.getUniqueUserName());
- }
- } else if (object instanceof Tribe) {
- Tribe tribe = (Tribe) object;
- if (type == 1) {
- sysContent.append("用户:").append(
- tribe.getUser().getUniqueUserName()).append("保存了部落:")
- .append(tribe.getName());
- } else if (type == 2) {
- sysContent.append("用户:").append(tribe.getDeleteUser()).append(
- "删除了部落:").append(tribe.getUniqueTribeName());
- }
- } else if (object instanceof Assessment) {
- Assessment assessment = (Assessment) object;
- int assType = assessment.getType();
- User user = assessment.getUserByUserId();
- sysContent.append("用户:").append(user.getUniqueUserName()).append(
- "举报了");
- if (assType == 1) {
- sysContent.append("资源").append(
- assessment.getResource().getTitle());
- } else if (assType == 2) {
- sysContent.append("部落").append(
- assessment.getTribeByAccTribeId().getUniqueTribeName());
- } else if (assType == 3) {
- sysContent.append("人").append(
- assessment.getUserByUserId().getUniqueUserName());
- }
- } else if (object instanceof Role) {
- Role role = (Role) object;
- sysContent.append("用户:").append(role.getOperaUser());
- if (type == 1) {
- sysContent.append("保存了").append(role.getRoleName());
- } else if (type == 2) {
- sysContent.append("删除了").append(role.getRoleName());
- }
- } else if (object instanceof Resource) {
- Resource res = (Resource) object;
- boolean isPass = res.getAppStatus() == 1;
- sysContent.append("一级审核人员:").append(res.getAppUser().getUniqueUserName());
- sysContent.append("审核").append(res.getUniqueResName());
- if (!isPass) {
- sysContent.append("未通过");
- } else if (isPass) {
- sysContent.append("通过");
- }
- }
- logger.info(sysContent.toString());
- sysLog.setContent(sysContent.toString());
- return sysLog;
- }
- }
在需要插入注解的方法上面写上@RecordLog就可以啦
- 采用spring AOP 和注解解决日志
- 利用Spring AOP自定义注解解决日志和签名校验
- 利用Spring AOP自定义注解解决日志和签名校验
- Spring AOP自定义注解解决日志和签名校验
- 利用Spring AOP自定义注解解决日志和签名校验
- Spring采用注解使用AOP
- 利用Spring AOP自定义注解解决日志和签名校验 详解
- 利用Spring AOP (aspect) 自定义注解解决日志和签名校验
- spring采用注解方式实现AOP
- 基于Spring aop 和JAVA注解方式添加日志
- 基于Spring aop 和JAVA注解方式添加日志
- 基于Spring aop 和JAVA注解方式添加日志
- 采用Spring AOP实现日志记录
- 利用spring AOP注解实现日志管理
- spring aop注解配置web日志
- spring aop注解配置web日志
- spring aop注解配置web日志
- Spring AOP 自定义注解记录操作日志
- Activity的生命周期
- 大型web2.0互动网站设计方案
- 带你进入百度地图开发的世界
- intel dpdk api memory manage module (内存管理模块)
- ==和equals的区别
- 采用spring AOP 和注解解决日志
- JAVA常用类———StringBuffer类
- Grails级联下拉框的实现
- USB无线网卡驱动移植(1)
- AudioQueue来实现音频播放功能时最主要的步骤
- 导致机接口出现err-disable的几个常见原因:
- linux tar命令使用详解
- delphi服务程序(service)的调试方法
- EOF 与 BOF 之分