这个注解的作用就是开启我们的自定义注解(@KirinLog)功能 这里面还用到了@Import(KirinLogImportSelector.class) @Import的作用 1.引入其他的@Configuration 2.@Import可以直接指定实体类,加载这个类定义到context中。 例如把上面代码中的KirinLogImportSelector的@Import修改为@Import(ServiceB.class),就会生成Service...
1.实现自定义注解 下面我们先使用 AOP 的方式来实现一个打印日志的自定义注解,它的实现步骤如下: 添加Spring AOP 依赖。 创建自定义注解。 编写AOP 拦截(自定义注解)的逻辑代码。 使用自定义注解。 具体实现如下。 ① 添加 Spring AOP 依赖 在pom.xml 中添加如下依赖: <dependencies> <!-- Spring AOP depende...
1@Service2publicclassTeacherimplementsITeacher {34//为需要打印入参出参的方法 加上@Log注解即可5@Log6@Override7publicintadd(inti,intj) {8intadd = i +j;9System.out.println("执行目标方法:老师正在做加法,结果为:" +add);10//int throwable = 10 / 0; 测试异常通知11returnadd;12}1314} 测试类 ...
AOP注解和XML方式实现 注意:AspectJ本身并不是spring框架中的组成部分, 是一个独立的AOP框架,一般把AspectJ和Spring框架的AOP依赖一起使用,所以要导入一个独立的依赖 实现的两种方式 1、基于注解方式实现 (熟练) 2、基于XML配置方式 (了解) 一、注解方式实现 1、准备工作 导入依赖 代码语言:javascript 复制 <de...
1.3 注解业务案例 @Aspect@ComponentpublicclassSecurityAspect{// 切点和通知定义} 2. @Pointcut 2.1 注解作用介绍 @Pointcut注解用于定义一个切点,可以与@Before、@AfterReturning、@AfterThrowing等注解结合使用。 2.2 注解属性介绍 value: 指定切点表达式。
@Pointcut注解指定一个切面,定义需要拦截的东西,这里介绍两个常用的表达式:一个是使用 execution() ,另一个是使用annotation()。 以execution(* com.hong.controller..*.*(..)))表达式为例,语法如下: execution() 为表达式主体 第一个 * 号的位置:表示返回值类型, * 表示所有类型 ...
上面的例子很简单,就是在 UserService 的 addUser()方法和 deleteUser()方法增加前置通知和后置通知,这在实际操作中很好理解。比如这是和数据库打交道的话,那么我们在 addUser() 或者 deleteUser() 时,必须要在前面开始事务,操作完毕后提交事务。下面我们就用注解的方式来配置。
2.AOP中的5大通知注解 2.1 @Before:前置通知 /** * 前置通知方法的定义 * 1) 方法是public * 2) 返回值是void * 3) 方法名称自定义 * 4) 可以有参数,也可以无参数。如果有,参数是JoinPoint * * @Before: 前置通知 * 属性: value 切入点表达式,表示切面的执行位置。在这个方法执行时,会同时执行切面...
自定义注解 这里以一个 Limiter 注解为例,实现了方法的限流。 创建一个注解类,使用@interface注解标注。然后在注解类上加上@Retention(RetentionPolicy.RUNTIME)和@Target({ElementType.METHOD})元注解。Retention 注解是标注这个注释将由编译器记录在类文件中,并在运行时由 VM 保留,因此可以反射性地读取它们。Target ...
为了实现 Spring AOP 自定义注解来验证数据正确性,首先需要创建一个自定义注解、一个切面以及相应的通知方法来处理带有该注解的方法参数或者方法执行前后的验证逻辑。下面是一个简化的示例:1. 创建自定义注解 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation...