最近准备开始新项目,在项目启动前,我们的架构师分配了个任务给我,利用spring的切面技术做一个日志管理的案例。要求很简单,就是需要记录:谁在什么时候对谁做了什么操作,同时在日志的描述中还要有修改前后内容的对比。话说两句话是挺简单的,但是对于对spring只有初学者水平的我还是有点难度的,于是各种百度,各种谷歌,各种想。终于在这篇https://kaowww153.iteye.com/blog/603891博客中得到启发,但是里面的内容写的还是不够完整,和我的需求也有些不一样。经过多次的修改和测试,终于成功通过。今天闲来无事,写个博文,以备下次需要做好笔记。话不多说,把过程写下:

1.首先创建一个自定义注解,如下:

@Target({ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

public @interface RecordLog {
}
2.写一个过滤方法,这个方法是实现MethodIntherceptor接口的invoke方法

public class LogAroundInterceptor implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
return returnObject;
}

3.在springapplicationContext.xml文件里需要对我们的切面和注解进行配置。

4.我的实体类common

@RecordLog
public void update(User user, User opeartor, HttpServletRequest request) {
UserDao userDao = new UserDaoImpl();
userDao.updateUser(user);
System.out.println(“修改成功“);
}

5.servlet测试
UserDao userDao = new UserDaoImpl();
BeanFactory factory = new ClassPathXmlApplicationContext(“applicationContext.xml”);
Common c = (Common) factory.getBean(“common”);
User user = new User();
user.setId(2);
user.setName(““);
user.setPassword(“123456”);
user.setAge(18);
user.setSex(““);
User opeartor = userDao.findAllUserById(3);
User oldUser = userDao.findAllUserById(2);
HttpSession session = request.getSession();
session.setAttribute(“oldUser”, oldUser);
c.update(user, opeartor, request);

测试结果:成功获得我所需要的新旧对象,以及操作人,时间,描述等都可以在getSysLog()方法中获取,至于如何添加就简单啦,就不写上了。
6.使用方法很简单了:在需要添加日志的方法上加上我们的注解@RecordLog就可以了(就像我common类里的update方法一样)。