AOP切面模式:
依赖AopModel装饰器,再在方法上加入@AopModel即可切入编程
优点:
当使用@AopModel时,内部函数将会逐级调用回调函数,执行循序是:
- func(*self.args, **self.kwargs)
- func(*self.args)
- func(**self.kwargs)
- func()
这将意味着,如果你的参数传入错误时,AopModel依旧会遵循原始方法所使用的规则,最令人大跌眼镜的使用方法就是:
<code>
def Before(**kwargs):
print('Before:', kwargs)
# 此处的Before方法未存在args参数,而使用@AopModel时却传入了args
@AopModel(before=Before,before_args=(0,1,2), before_kwargs={'1': '1'})
def find_title_and_selects(self, **kwargs):
print('function task', kwargs['uid'])
_r = self.orm.find().where(index="<<100").end()
print(_r)
return _r
</code>
其中包含参数有:
before:切入时需要执行的函数
before_args:切入的参数
传入的列表或元组类型数据
如果是需要使用当前pojo中的内容时,传参格式为:(pojo.字段名)
可扩展格式,例如需要传入字典
before_kwargs:切入的参数 -- 传入的字典数据
after:切出前需要执行的参数
after_args:切出的参数
传入的列表或元组类型数据
如果是需要使用当前pojo中的内容时,传参格式为:('self.字段名')
可扩展格式,例如需要传入字典:('self.dict.key')
after_kwargs:切出的参数 -- 传入的字典数据
执行流程:
Before->original->After
Before注意事项:
使用该参数时,方法具有返回值概不做处理,需要返回值内容可使用`global`定义一个全局字段用于保存数值
当无法解析或者解析失败时m将使用pass关键字忽略操作
After注意事项:
使用该参数时,必须搭配至少一个result=None的kwargs存在于方法的形参中,
当original方法执行完成将把返回值固定使用result键值对注入到该函数中
当无法解析或者解析失败时m将使用pass关键字忽略操作
Attributes:
before:切入时需要执行的函数
after:切出前需要执行的参数
before_args:切入的参数
传入的列表或元组类型数据
如果是需要使用当前pojo中的内容时,传参格式为:(pojo.字段名)
可扩展格式,例如需要传入字典
before_kwargs:切入的参数 -- 传入的字典数据
after_args:切出的参数
传入的列表或元组类型数据
如果是需要使用当前pojo中的内容时,传参格式为:('self.字段名')
可扩展格式,例如需要传入字典:('self.dict.key')
after_kwargs:切出的参数 -- 传入的字典数据
Definition at line 106 of file Annotation.py.