您的位置:首页 > 运维架构

AOP动态代理

2020-02-02 00:11 603 查看

动态代理类:在程序运行时,通过反射机制动态生成。
动态代理类通常代理接口下的所有类。

动态代理事先不知道要代理的是什么,只有在运行的时候才能确定。
动态代理的调用处理程
序必须事先InvocationHandler接口,及使用Proxy类中的newProxyInstance方法动态的创
建代理类。
Java动态代理只能代理接口,要代理类需要使用第三方的CLIGB等类库。

切面(Aspect):  横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象
通知(Advice):  切面必须要完成的工作
目标(Target): 被通知的对象
代理(Proxy): 向目标对象应用通知之后创建的对象
连接点(Joinpoint):程序执行的某个特定位置
aop:管理事务
aop 面向切面编程
切面----切点(包+类+方法)找到目标方法/被代理的方法-----通知(找到目标代理后怎加目标功能
---连接点---目标方法信息
在配置文件中<aop:aspect-autoproxy></aop:aspect-autoproxy>//开启aop动态代理
创建切面类 注释他@Aspect//代表切面类 @Component//让配置文件能扫描到他

AspectJ 支持 5 种类型的通知注解: //重点通知方式
@Before: 前置通知, 在方法执行之前执行
@After: 后置通知, 在方法执行之后执行 
@AfterRunning: 返回通知, 在方法返回结果之后执行
@AfterThrowing: 异常通知, 在方法抛出异常之后
@Around: 环绕通知, 围绕着方法执行

通知注解括号中是切点,输入切入具体的切点地址,(是切入接口地址/不是切入实现类)
第一个*号返回任何的修饰符,第二个*号表示该类下所有,第三个*(..)表示对应接口的方法
例子:@Before(“execution(* com.lovo.*.service.IUserService.*(..))”)
方法中没有返回值(JoinPoint joinPoint)参数

@Around: 环绕通知, 需要在方法中书写返回值,返回类型为Object
方法传参(ProceedingJoinPoint  joinPoint)方法参数

@Pointcut 切点    @Pointcut("execution(* *.service.IUserService.*(..))")
   注解下的:方法 public void point(){}  
用法可将切点方法放到,通知注释后,做到多个通知同时共享,封装

获取切面bean  id = ‘’Aspect‘’
获取切点
<aop:ponintcut id="1" expression=切点"execution(* *.service.IUserService.*(..))"/>
aop
<aop:config>
//aop:通知@  //method获取切面Bean中的方法,书写方法名 ,pointcut-ref=切点注入
     <aop:after method=" " pointcut-ref=“1”
    //aop增强通知
    <aop:aadvisor advice-ref="" pointcut="切点execution()"/>
</aop:config>

  • 点赞
  • 收藏
  • 分享
  • 文章举报
limeAI 发布了24 篇原创文章 · 获赞 4 · 访问量 1402 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: