美文网首页程序员Java 杂谈互联网科技
一个简单的例子,学习自定义注解和AOP

一个简单的例子,学习自定义注解和AOP

作者: Java技术剑 | 来源:发表于2018-10-21 20:32 被阅读47次

前言

面试的时候,被问的最多的可能就是你知道Spring的两大核心嘛?那你说说什么是AOP,什么是IOC?我相信你可能也被问了很多次了。

1、到底是什么是AOP?

所谓AOP也就是面向切面编程,能够让我们在不影响原有业务功能的前提下,横切扩展新的功能。这里面有一个比较显眼的词我们需要注意一下,横切,它是基于横切面对程序进行扩展的。

2、AOP相关术语

在Spring的AOP中有很多的术语,而且容易混淆,大家一定要先搞清楚这几个概念:

连接点(Joinpoint):在程序执行过程中某个特定的点,比如类初始化前、类初始化后,方法调用前,方法调用后;

切点(Pointcut):所谓切点就是你所切取的类中的方法,比如你横切的这个类中有两个方法,那么这两个方法都是连接点,对这两个方法的定位就称之为切点;

增强(Advice):增强是织入到连接点上的一段程序,另外它还拥有连接点的相关信息;

目标对象(Target):增强逻辑的织入目标类,就是我的增强逻辑植入到什么位置;

引介(Introduction):一种特殊的增强,它可以为类添加一些属性喝方法;

织入(Weaving):织入就是讲增强逻辑添加到目标对象的过程;

代理(Proxy):一个类被AOP织入增强后,就会产生一个结果类,他是融合了原类和增强逻辑的代理类;

切面(Aspect):切面由切点和增强组成,他是横切逻辑定义和连接点定义的组成;

3、AOP功能实践

我们这里主要是学习SpringBoot中的一些功能,所以我们这里用的是SpringBoot工程,版本也是最新的2.0.5版本。

创建SpringBoot工程就不说了,我们直接引入Maven的依赖:

首先我们来创建一个Controller类:

创建切面:

注解概述:

@Apsect:将当前类标识为一个切面;

@Pointcut:定义切点,这里使用的是条件表达式;

@Before:前置增强,就是在目标方法执行之前执行;

@AfterReturning:后置增强,方法退出时执行;

@AfterThrowing:有异常时该方法执行;

@After:最终增强,无论什么情况都会执行;

@Afround:环绕增强;

测试:

异常测试:

4、定义自定义注解

应用场景:在我之前上个项目的时候,有这样一个注解,就是在访问其他接口的时候必须要登录,那么这个时候我们就定义一个注解,让它去对用户是否登录进行校验,那么基于这样的一个场景,我们来定义一个校验登录的注解。

创建一个注解:

创建一个AOP切面:

测试未登录:

测试登录:

这样我们就可以简单的实现了一个登录校验的注解。

通过今天的分享你会使用AOP和自定义注解了吗?

欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

相关文章

  • 一个简单的例子,学习自定义注解和AOP

    前言 面试的时候,被问的最多的可能就是你知道Spring的两大核心嘛?那你说说什么是AOP,什么是IOC?我相信你...

  • 注解

    理解注解 自定义注解实现aop

  • Java注解笔记

    首先看下列的一个简单自定义注解的例子:Table 注解 Column 注解 User 类(使用注解的类) 测试方法...

  • 9、AOP继续学习

    一、实战:使用@AspectJ注解的例子 下面使用一个简单有趣的例子来演示Spring AOP的用法,演绎一段“武...

  • SpringBoot MySQL 多数据源配置

    通过自定义注解,AOP,AbstractRoutingDataSource 实现 定义 DataSource 注解...

  • Spring boot 使用Aop

    AOP及自定义注解使用Spring boot 使用AopJava自定义注解 Aop即为切面编程,通常以下几个场景回...

  • Hibernate Validator

    1.常用注解 2.自定义验证注解 一个简单的密码验证的例子 2.1 定义注解 @Constraint 里面指定执行...

  • jfinal aop全局拦截器设置切点

    jfianl 的aop分为全局和基于注解两种,spring的aop很复杂,但是spring的aop可以自定义切点,...

  • 缓存击穿解决方案

    代码逻辑如下: 自定义注解 aop方案

  • [Guice] 7 Guice Aop

    Guice中的Aop,通常是结合自定义注解实现。 以实现一个日志打印的切面注解为例:1、自定义注解 2、在modu...

网友评论

    本文标题:一个简单的例子,学习自定义注解和AOP

    本文链接:https://www.haomeiwen.com/subject/olrizftx.html