aop流程图
2016-03-09 10:28:57 12 举报
AOP(面向切面编程,Aspect Oriented Programming)流程图是一种用于描述系统中各个组件之间关系的图形化表示方法。在AOP流程图中,主要包含以下几个部分:1. 切入点(Pointcut):定义了需要应用切面的逻辑;2. 通知(Advice):定义了在切入点处需要执行的操作;3. 切面(Aspect):将切入点和通知组合在一起,形成一个完整的功能模块;4. 目标对象(Target Object):被切面作用的对象;5. 代理对象(Proxy Object):切面应用后生成的新对象。通过这些组件之间的交互,AOP实现了对系统功能的横向扩展,提高了代码的复用性和可维护性。
作者其他创作
大纲/内容
获取拦截器链
将该通知器加入到通知器链中
获取通知器链
如果是pointcutAdvisor则判断是否匹配目标方法
如果是introductionAdvisor则判断是否匹配目标类
cglib动态代理
如果不是全局通知器,则判断该通知器是否是单例的,如果是单例的,则在容器中根据该名字取出,如果是原型的,则创建一个新的通知器
调用代理对象invoke方法
通过DynamicAdvisedInterceptor内部类实现了MethodInterceptor接口,调用了通知器
获取目标类,判断目标类是否为cglib代理类,如果是则获取它的父类作为代理类的基类
有无接口
初始化通知器链,只初始化一次
创建原型代理对象
jdk动态代理
创建单例代理对象
如果不是则递归调用拦截器
获得目标对象所有接口,通过字节码生成代理对象
配置通知器,包含切点和通知,并注入proxyFactoryBean中
获得目标类的class文件,获取目标类的所有接口
全局通知器不能再最后一个,除非你手动配置了目标源
aop流程
如果拦截器的名称结尾为*号,则将所有的以这个名称开头的拦截器加入到通知器链中
根据配置单例属性是否为true来生成单例代理或原型 代理
判断是否有接口,如果有接口就用jdk动态代理,如果没有接口就用cglib
获取自己父类的一个副本,配置信息,为副本添加接口,利用该副本创建代理
proxyFactoryBean调用getObject()方法
判断是否是adviced接口定义的方法,如果是就直接反射调用
通过适配器转换为拦截器链
调用DefaultAopProxy类的createAopProxy方法
调用父类ProxyCreatorSupport的createAopProxy方法,通知所有观察者有一个aop代理对象要被创建
0 条评论
下一页