标签:信息 添加 描述 source 账户 事务管理 运用 sky 获取
在applicationContext.xml中开启AOP代理
<aop:aspectj-autoproxy />
自定义一个注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogAnno {
String operatorType();
}
编写一个切面类
@Component
@Aspect
public class LogAopAspect {
@Autowired
LogtableService logtableService;//Logtable为数据库中的一张表,用于存储日志信息
@Around("@annotation(qj.admin.aspect.LogAnno)")//设定需要捕获的标签
public Object around(ProceedingJoinPoint pjp) throws Throwable
{
MethodSignature methodSignature =(MethodSignature)pjp.getSignature();
Method method = methodSignature.getMethod();
String targetName = pjp.getTarget().getClass().getName();
System.out.println("增强的类是:"+targetName);
System.out.println("增强的方法是:"+method.getName());
Method realMethod = pjp.getTarget().getClass().getDeclaredMethod(methodSignature.getName(), method.getParameterTypes());
LogAnno logAnno = realMethod.getAnnotation(LogAnno.class);//获取注解的方法上的自定义标签类
String operatortype = logAnno.operatorType();//获取到自定义标签上的注解如“修改账户状态”
//String operatortype = "修改用户积分";
AdminLog adminLog = new AdminLog();
adminLog.setOperatortype(operatortype);
adminLog.setOperator("123");
Object resultObject = null;
Object [] parameter = pjp.getArgs();//获取注解的方法的传入参数
try {
resultObject = pjp.proceed();
adminLog.setOperatorresult("正常 "+Arrays.toString(parameter));
} catch (Exception e) {
// TODO: handle exception
adminLog.setOperatorresult("失败");
}
finally {
adminLog.setOperatordate(new Date());
logtableService.addLog(adminLog);
}
return resultObject;
}
用自定义注解注解一个方法
@LogAnno(operatorType = "修改账户状态")
public void handleUser(int IDNumber, int type) {
User user = userDAO.get(IDNumber);
userDAO.update(user, type);
}
项目目录结构
以下为本次实践过程中参考过的较为实用的博客链接
标签:信息 添加 描述 source 账户 事务管理 运用 sky 获取
原文地址:https://www.cnblogs.com/fzu221701237/p/13125061.html