gpt4 book ai didi

java - 使用spring检查旧对象和新对象的变化

转载 作者:行者123 更新时间:2023-11-30 09:18:20 24 4
gpt4 key购买 nike

我的确切要求是将旧对象和新对象的值记录在一起。例如,如果以前用户的名称是“AAA”并且有人将名称更改为“CCC”而不是在服务层我需要这样记录“用户名从 AAA 更改为 CCC,日期为 10-09-2013”​​。请在 spring 框架中提供一些解决方案。

最佳答案

您可以使用 Spring AOP,拦截 bean 的 setter 并记录属性更改,基本思想在这里

class B1 {
String name = "xxx";
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}

@Aspect
class A1 {
@Before("execution(void test.B1.set*(*))")
public void before(JoinPoint jp) throws Exception {
String prop = jp.getSignature().getName().substring(3);
Object target = jp.getTarget();
Object before = target.getClass().getMethod("get" + prop).invoke(target);
Object now = jp.getArgs()[0];
System.out.println(prop + " changed from " + before + " to " + now);
}
}

public class Test1 {

public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("test1.xml");
B1 b1 = ctx.getBean(B1.class);
b1.setName("yyy");
}
}

这打印

Name changed from xxx to yyy

测试1.xml

...
<context:annotation-config />
<aop:aspectj-autoproxy />
<bean class="test.B1" />
<bean class="test.A1" />
...

关于java - 使用spring检查旧对象和新对象的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18529505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com