我想知道是否有人有使用拦截器设置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函数。我在哪里可以找到有关此信息?并且可能吗?
答案 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。使用排序映射备份队列,甚至可以通过在插入之前替换两次修改的对象来进行优化。
干杯,