2

我想知道是否有人在春季使用拦截器设置 bean 的经验,该拦截器会在属性更改时自动触发事件。

public class DTO {
    public String a;    
}

public class Listener() {
    public void objectChanged(Object ob) {
        System.out.println("Object changed");
    }
}

关于课程结束,如果我执行以下操作。

public static void main(String args[]) {
    DTO ob = AppContext.getBean(DTO.class);
    ob.a = "new value";
}

我想在这里发生的是,当 DTO 对象上的属性 a 发生更改时,spring 会自动触发侦听器 objectChanged 函数。我在哪里可以找到有关这方面的信息?有可能吗?

4

1 回答 1

0

正如@DaDaDom 所问,为什么要避免getter/setter?我认为您的想法是不可能的,但可以使用 AOP 以类似于

<aop:aspectj-autoproxy/>

<aop:config>
    <aop:pointcut id="yourcut" expression="execution(* your.dto.package.*.set*(..))" />
    <aop:advisor advice-ref="attribChangedAdvice" pointcut-ref="yourcut" />
</aop:config>

<bean id="attribChangedAdvice" class="your.package.YourListener">
    ...
</bean>

然后,您可以让侦听器将更改的对象放入队列中以插入/更新到数据库。使用各种映射支持队列,您甚至可以通过在插入两次修改的对象之前替换它们来进行优化。

干杯,

于 2013-06-26T08:21:06.787 回答