AOP的两种实现方式

大家都知道spring最大的特点就IOC和AOP,IOC是最常用的注入,就是被注入的类上加@Component注解,在需要用到时候,通过 @Autowired注入,不用每次都new出来。当然为了分清层级,@Component通常使用@Repository、@Service、@Controller代替。

本文只要记录AOP的用法,以springboot框架为例。

个人理解AOP就是拦截器,(可能是我理解不全面,反正我现在就认为它是拦截器,拦截器!拦截器!只不过娶个英文名字而已)。 功能:AOP可以在做某些事情之前或之后强塞一些操作。

我知道的有两种实现方法,路径切入和注解切入,区别在于切点,两者各有利弊,前者适合批量切入,后者比较灵活,加注解的类才会被切。

1、通过路径切入 2、通过注解切入

路径切入

1、新建切面类上面加俩注解 @Aspect @Component 缺一不可 2、@Pointcut写上要切入的包,也可以精确到类 3、@Before切入点之前要处理的业务 4、@After切入点之后要处理的业务

@Aspect
@Component
public class VisitAop {
    
  @Pointcut("execution(public * com.forum.controller.*.*(..))")
  public void log() {
  }

  @Before("log()")
  public void doBefore(JoinPoint joinPoint) {
        ........
  }
  
  @After("log()")
  public void doAfter() {
        ........
  }
}

注解切入

1、自定义注解 2、切入类@Aspect @Component 缺一不可 3、@Pointcut写上要切入注解(意思是带此注解者,必切!) 4、@Before、@After同上。

1、自定义注解 1.1 @Target和@Retention定义自定义注解,无需其他,标识作用的注解。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface VisitCount {
}

3、切入点 3.1和路径切入的区别在此

@Pointcut("@annotation(com.Annotation.VisitCount)")

JoinPoint

此外可以了解一些doBefore(),的参数JoinPoint,以便操作业务;

1、joinPoint.getSignature().getDeclaringType().getSimpleName(),切入的类名 2、joinPoint.getArgs(),切入方法的参数数组 3、joinPoint.getSignature().getName(),切入方法名

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据库新发现

Oracle数据库恢复:归档日志损坏案例一则

链接:http://www.eygle.com/archives/2010/11/recover_archivelog_corruption.html

10920
来自专栏技术总结

献给移动端的服务器搭建

application.properties这个是项目的一些配置,举例一下默认是8080端口,我们如果想改下端口的话,就可以在配置增加

28820
来自专栏程序猿DD

Spring Boot使用@Async实现异步调用:ThreadPoolTaskScheduler线程池的优雅关闭

上周发了一篇关于Spring Boot中使用 @Async来实现异步任务和线程池控制的文章:《Spring Boot使用@Async实现异步调用:自定义线程池》...

69370
来自专栏A周立SpringCloud

使用Feign实现Form表单提交

之前,笔者写了《使用Spring Cloud Feign上传文件》。近日,有同事在对接遗留的Struts古董系统,需要使用Feign实现Form表单提交。其实步...

58060
来自专栏生信技能树

不可不知的基因组版本对应关系

不同版本对应关系 hg19,GRCH37和Ensembl75是三种国际生物信息学数据库资源收集存储单位,即NCBI,UCSC和ENSEMBL各自发布的基因组信息...

425100
来自专栏生信技能树

把含有多样本的vcf文件拆分

非常多已经造好的轮子可以完成,包括bcftools,vcftools,还有大名鼎鼎的GATK,随便举例如下:

44840
来自专栏黑泽君的专栏

常用的 default.properties 文件 + 常用的 struts-default.xml 文件 + 常用的 struts-plugin.xml 文件 + 常用的 struts.xml 文件

常用的 default.properties 文件,所在位置:\struts-2.3.15.3-all\struts-2.3.15.3\apps\struts2...

10040
来自专栏杨建荣的学习笔记

缓慢的update语句性能分析(r6笔记第61天)

最近处理一个问题的时候,先是收到DB time升高的报警,然后查看DB time的情况发现,已经有近1000%的负载了。 ? 带着好奇心想看看到底是什么样的...

30350
来自专栏生信技能树

GATK4的gvcf流程

得到了它们的bam文件,也是走的GATK流程,这里就不多说了。本教程首发于生信技能树VIP论坛:https://vip.biotrainee.com/d/423...

34230
来自专栏生信技能树

GATK best practice每个步骤耗时如何?

上次我们介绍了完整的 GATK best practice(请点击) 在我的基因组重测续数据分析流程,详细讲解了每个步骤的代码,输入输出文件,准备文件,以及耗时...

50170

扫码关注云+社区

领取腾讯云代金券