SpringBoot之AOP 的使用

一.什么是注解?

注解是在javaSE5就被引入的Java的,提供一种以元数据的形式添加到代码中。注解可以在编译时存在,并且对代码的执行没有直接的影响。****(可以理解为标签,类似于人种:黄种人-白种人-黑种人等)

|------------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
| 元注解 | 说明 | 参数 |
| @Target | Annotation所修饰的对象范围:Annotaion可以被用于package,types(类,接口,枚举,Annotation类型),类型成员(方法,构造方法,成员变量,枚举值),方法参数和本地变量(如循环变量,catch参数) | 1.CONSTRUCTOR:用于描述构造器。 2.FIELD:用于描述域。 3.LOCAL_VARIABLE:用于描述局部变量。 4.METHOD:用于描述方法。 5.PACKAGE:用于描述包。 6.PARAMETER:用于描述参数。 7.TYPE:用于描述类,接口(包括注解类型)或enum声明。 |
| @Retention | 定义了Annotation被保留的时间长短 | 1.SOURCE:在源文件中有效。 2.CLASS:在class文件中有效 3.RUNTIME:在运行时有效。 |

二.注解的使用

例如:@RestController注解

复制代码
@RestController
public class ProxyDemoController {
}

以下是@RestController 的代码:

复制代码
package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Controller;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(
        annotation = Controller.class
    )
    String value() default "";
}

三.认识aop

AOP的含义为面向切面编程,是对方法的一个增强。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间耦合度降低,提高代码的可重用性,同时提高开发效率。

例如权限校验的业务:权限校验管理员和访客,进行更新操作

其中前三步骤代码可以简化

四.aop 的使用

AOP一般使用在权限管理,事务处理,日志等。

aop相关注解:

|--------|-----------|
| @Befor | 在切点方法执行之前 |
| @After | 在切点方法执行之后 |

以下为通过注解实现对权限管理的aop使用:

相关推荐
头发还在的女程序员19 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
CodeStats19 小时前
【Spring事务】Spring事务注解 @Transactional 完整体系:从 MySQL 隔离级别到 MyBatis 原理详解
java·spring·mybatis·事务·transactional
我命由我1234520 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
都叫我大帅哥1 天前
从Python到Java:为什么企业级Agent最终会选择Java?
java·ai编程
wanderist.1 天前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
腻害兔1 天前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
心念枕惊1 天前
.NET CORE 授权进阶-角色、策略与动态权限实现
java·前端·.netcore
景同学1 天前
把 AI 用到线上运维:可行、有效,前提是喂足信息——一次 Full GC 排障实录
java·人工智能·后端
C++、Java和Python的菜鸟1 天前
第7章 后端Web实战(Tlias系统)
java
憧憬成为java架构高手的小白1 天前
黑马八股--spring框架学习
java·学习·spring