栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring AOP-在调用setter之前获取旧的字段值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring AOP-在调用setter之前获取旧的字段值

我建议将完整的AspectJ与

set()
切入点结合使用,以获得有效的解决方案。但是,如果您不介意使用缓慢而丑陋的解决方案来进行反射,那么您也可以执行以下操作:

package de.scrum_master.app;public class Person {    private int id;    private String firstName;    private String lastName;    public Person(int id, String firstName, String lastName) {        this.id = id;        this.firstName = firstName;        this.lastName = lastName;    }    public int getId() { return id; }    public String getFirstName() { return firstName; }    public String getLastName() { return lastName; }    public void setId(int id) { this.id = id; }    public void setFirstName(String firstName) { this.firstName = firstName; }    public void setLastName(String lastName) { this.lastName = lastName; }    @Override    public String toString() { return "Person [" + id + ", " + firstName + " " + lastName + "]"; }    public static void main(String[] args) {        Person albert = new Person(1, "Albert", "Camus");        Person audrey = new Person(2, "Audrey", "Hepburn");        System.out.println(albert);        System.out.println(audrey);        System.out.println();        albert.setId(8);        albert.setLastName("Einstein");        audrey.setId(9);        audrey.setLastName("Tautou");        System.out.println();        System.out.println(albert);        System.out.println(audrey);    }}package de.scrum_master.aspect;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.SoftException;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;@Aspectpublic class SetterInterceptor {    @Before("execution(* set*(*)) && target(instance) && args(newValue)")    public void beforeSetterCalled(JoinPoint thisJoinPoint, Object instance, Object newValue) {        String methodName = thisJoinPoint.getSignature().getName();        try { System.out.println(     methodName.substring(3) + ": " +     instance         .getClass()         .getMethod(methodName.replaceFirst("set", "get"))         .invoke(instance) +     " -> " + newValue );        } catch (Exception e) { throw new SoftException(e);        }    }}

控制台日志:

Person [1, Albert Camus]Person [2, Audrey Hepburn]Id: 1 -> 8LastName: Camus -> EinsteinId: 2 -> 9LastName: Hepburn -> TautouPerson [8, Albert Einstein]Person [9, Audrey Tautou]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/463704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号