使用Spring的类属性更改侦听器

时间:2013-06-26 08:11:40

标签: java spring interceptor

我想知道是否有人有使用拦截器设置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函数。我在哪里可以找到有关此信息?并且可能吗?

1 个答案:

答案 0 :(得分:0)

正如@DaDaDom所问,你为什么要避免吸毒者/二传手?我不认为你的想法是可能的,但可以用类似于

的方式使用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>

然后,您可以让侦听器将更改的对象放入队列以插入/更新到DB。使用排序映射备份队列,甚至可以通过在插入之前替换两次修改的对象来进行优化。

干杯,