自定义注解实现AOP功能增强

1、什么是注解,官方给的解释:
注解是一种能被添加到java代码中的元数据,类、方法、变量、参数和包都可以用注解来修饰。注解对于它所修饰的代码并没有直接的影响。

2、注解使用的范围:
注解又许多用法,其中有:为编译器提供信息 - 注解能被编译器检测到错误或抑制警告。编译时和部署时的处理 - 软件工具能处理注解信息从而生成代码,XML文件等等。运行时的处理 - 有些注解在运行时能被检测到。

3、注解语法
注解在Java中,与类、接口、枚举类似,因此其声明语法基本一致,只是所使用的关键字有所不同@interface。在底层实现上,所有定义的注解都会自动继承java.lang.annotation.Annotation接口。

public @interface TestAnnotation {

}

4、常用的元注解
元注解:专门修饰注解的注解。它们都是为了更好的设计自定义注解的细节而专门设计的。

4.1、@Target注解,是专门用来限定某个自定义注解能够被应用在哪些Java元素上面的。
它使用一个枚举类型定义如下:

TYPE:类,接口(包括注解类型)或枚举的声明

FIELD:属性的声明

METHOD:方法的声明

PARAMETER:方法形式参数声明

CONSTRUCTOR:构造方法的声明

LOCAL_VARIABLE:局部变量声明

ANNOTATION_TYPE:注解类型声明

PACKAGE:包的声明

4.2、@Retention注解,翻译为持久力、保持力。即用来修饰自定义注解的生命力。
注解的生命周期有三个阶段:1、Java源文件阶段;2、编译到class文件阶段;3、运行期阶段。
同样使用了RetentionPolicy枚举类型定义了三个阶段:
SOURCE:注解将被编译器忽略掉

CLASS:注解将被编译器记录在class文件中,但在运行时不会被虚拟机保留,这是一个默认的行为

RUNTIME:注解将被编译器记录在class文件中,而且在运行时会被虚拟机保留,因此它们能通过反射被读取到

4.3、@Documented注解,是被用来指定自定义注解是否能随着被定义的java文件生成到JavaDoc文档当中。

5、创建自定义注解

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TestAnnotation {

}

6、创建AOP切面类

@Aspect   //定义切面类的时候需要打上这个注解
@Component
public class TestAspect {
    /**
     * 定义切点:@annotation(com.always.annotation.TestAnnotation)
     */
    @Pointcut(value = "@annotation(com.always.annotation.TestAnnotation)")
    public void pointcutTest(){

    }

    /**
     * 根据切点织入功能
     * @param proceedingJoinPoint
     */
    @Around(value = "pointcutTest()")
    public Object aroundTest(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        Object object = proceedingJoinPoint.proceed();

        System.out.println("根据自定义注解,织入了AOP方法!");

        return object;
    }

}

7、在测试方法上加自定义注解@TestAnnotation

// 自定义注解
@TestAnnotation
@ResponseBody
@PostMapping(value = "queryList")
public String queryList(@RequestBody Finance finance){
	// 业务代码

	return null;
}

调用方法,控制台打印了AOP方法的输出内容:
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AOP(面向切面编程)是一种编程范式,它通过在程序运行过程中的特定位置(切点)将额外的功能(加强方法)添加到应用程序中。 切点是程序执行过程中的一个特定位置。在AOP中,我们可以通过定义切点来确定在何处插入额外的功能。切点可以是方法的执行、异常的抛出、字段的访问等。通过使用切点,我们可以精确定位到在应用程序执行期间需要被增强的位置。 获取加强方法参数是指在切面中获取到被增强方法的参数。在AOP中,我们可以通过在切面中定义一个参数列表来获取被增强方法的参数。这样我们就可以在程序执行时获取到这些参数,并进行相应的操作。 例如,假设我们有一个切点是程序中的一个方法,而这个方法有一个参数name。我们可以在切面中定义一个参数列表,将这个name参数作为切面的参数之一。然后在执行程序时,我们可以通过访问切面的参数列表获取到这个name参数的值。 通过获取加强方法参数,我们可以在AOP实现一些有用的功能,比如记录日志、进行权限控制、性能监控等。通过在切面中获取方法参数,我们可以根据具体的需求来对这些参数进行处理,从而达到对应的功能目的。 总之,AOP切点获取加强方法参数是指在AOP编程中,通过定义切点来精确定位到需要被增强的位置,并通过切面中定义的参数列表获取到被增强方法的参数,以实现对参数的操作和处理。这样能够给应用程序增加额外的功能,并提高程序的灵活性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值