如果你采用第一种代理的方法,也是可以实现的。
在传入参数的时候,多传入一个Object参数。   然后在调用保存方法的时候判断对象instance of User 或者 Art  然后去调用不同的保存方法。如果你采用第二种方法也可以,这就也需要你提出关键代码,然后判断调用了

解决方案 »

  1.   

    用aop的方式记录吧,抽取个记录详细信息的方法逐个对参数类型进行判断,也比把日志代码写到业务逻辑里面好
      

  2.   

    实际项目里手动记录更多更实用,AOP记录这种日志只是看上去很美。
    public class CA {
          public void a() {
                b();
          }
          public void b() {
                // do something.
          }
    }例如AOP对方法a()做切面,可以打印出a的日志,但是这时AOP对b()不起作用。
      

  3.   

    仔细研究了一下,
    1、aop只适合于大同的情况下,就是所有的类的方法,记录日志格式一致时,用aop日志方式是个很不错的选择,反之,如果每个方法都有自己需要定制地方,比如记录不同的关键值,这个时候aop就似乎不太合适了,哪怕是用annotation,在目标方法上标明要获取的值来消除这种不同,这样也只能解决一部分问题,只能消除一部分不同的地方。
    2、在方法中,直接用log语句,这种方式最简单,最灵活,也最繁琐。
    3、研究log4j时,发现MDC和NDC这两个好东西,基与ThreadLocal的,和spring管理事务的原理一样。灵机一动,不如这样,spring aop负责记录大同的部分,在目标方法中,记录关键信息部分,无论是目标方法还是spring aop,它们都将数据放到MDC中,一个用户操作对应一个线程,在线程结束时,日志记录就放到了ThreadLocal对应的map中。
    第3个方法显然也是个折中的方法,集中了1和2的优点,但同时难免日志操作干扰业务逻辑的缺点。表达能力有限,请各位大侠批评指导。