ActiveRecord中的回调方法 - shuzheng/etmvc GitHub Wiki
etmvc中ActiveRecord模型对象拥有很多的操作方法,其中有一类称为回调方法,在ActiveRecord模型对象的生命周期内,回调给予你更多的、更灵活控制能力。回调方法就象一个钩子,它允许在模型对象操作数据的前后执行一段逻辑,这实际就是ActiveRecord模型对象的AOP编程。
ActiveRecord模型对象支持的回调方法有:
回调方法 | 执行时机 |
---|---|
beforeCreate | 对象创建前执行 |
afterCreate | 对象创建后执行 |
beforeUpdate | 对象更新前执行 |
afterUpdate | 对象更新后执行 |
beforeSave | 对象保存前执行 |
afterSave | 对象保存后执行 |
beforeDestroy | 对象删除前执行 |
afterDestroy | 对象删除后执行 |
回调方法签名:public void callbackMethodName() throws ActiveRecordException
我们举个回调方法应用的典型例子,在用户资料管理中,用户的信息除基本的信息外,还包括照片,而照片以文件的形式被保存在某个地方。为保证数据的完整性,在用户资料删除时必须同时删除其关联的照片文件。
我们来看一下用户的模型类定义:
@Table(name="users")
public class User extends ActiveRecordBase{
@Id private Integer id;
@Column private String name;
@Column private String phone;
@Column private String filename;
public void afterDestroy() throws ActiveRecordException{
String path = getImagePath();
File file = new File(path);
if (file.exists() && file.isFile()){
file.delete();
}
}
public String getImagePath(){
return "d:/temp/" + id + "_" + filename; //获取照片文件存放路径
}
//get,set...
}
我们重载了afterDestroy,告诉ActiveRecord框架,在记录删除后将相关的照片文件删除。现在来看调用代码:
User user = User.find(User.class, 1);
user.destroy();
我们无须在调用时编写删除照片文件的代码,仅仅将User对象删除就好,User对象会做相应的回调,执行相关的逻辑。
另外,在ActiveRecord模型对象执行回调方法时是有事务保证的,所以一旦照片文件删除失败,整个对象将执行回滚操作。如此,对于模型对象的调用者来说,这将变得更清晰。