自定义注解

简介: 本文介绍如何在Spring项目中实现自定义注解,结合AOP与注解的元数据特性,用于日志、权限、缓存等场景。通过@Target、@Retention等元注解定义注解,并借助AOP或过滤器实现功能增强,提升代码可读性与复用性。(238字)

6

code
code
6

code
code
自定义注解

自定义注解
1.前言
自定义注解目前在我使用过的项目中,主要用用作日志丰富,参数处理,其核心还是借助于Spring的AOP进行实现,本文将结合具体代码演示简单的自定义注解实现流程。
2.实现
2.1 定义User
2.2 定义UserDAO
Java
运行代码
复制代码
1
2
3
4
5
6
7
8
9
10
@Component
public class UserDao {

public User findUserById(Integer id) {
    if(id > 10) {
        return null;
    }
    return new User(id, "user-" + id);
}

}
2.3 定义UserService
Java
运行代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
@Service
public class UserService {

private final UserDao userDao;

public UserService(UserDao userDao) {
    this.userDao = userDao;
}

public User findUserById(Integer id) {
    return userDao.findUserById(id);
}

}
2.4 定义Controller
Java
运行代码
复制代码
1
2
3
4
@RequestMapping(value = "user/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public User findUser(@PathVariable("id") Integer id) {
return userService.findUserById(id);
}
此时浏览器访问:http://{domain}/user/1即可出现对应效果
JSON
复制代码
1
2
3
4
{
"id": 1,
"name": "user-1"
}
2.5 定义自定义注解
Java
运行代码
复制代码
1
2
3
4
5
6
7
8
9
import java.lang.annotation.*;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CustomAnnotation {
String name() default "";
String value() default "";
}
说明:
@interface 不是interface,是注解类 定义注解
Documented
这个Annotation可以被写入javadoc
@Retention
修饰注解,是注解的注解,称为元注解
SOURCE, // 编译器处理完Annotation后不存储在class中
CLASS, // 编译器把Annotation存储在class中,这是默认值
RUNTIME // 编译器把Annotation存储在class中,可以由虚拟机读取,反射需要
@Target
注解的作用目标
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE) //局部变量
@Target(ElementType.ANNOTATION_TYPE) //注解
@Target(ElementType.PACKAGE) //包
可以定义多个方法,每个方法在使用时参照下面的Controller使用即可,实际就是类似于@PostMapping这样的注解中使用过的value,method,produces等,如下:
2.6 AOP+Controller使用自定义注解
3.总结
自定义注解其核心是借助于:@Target 和 @Rentention,@Documented组合实现,其实现还是需要依赖于Spring的AOP进行具体体现,除了上面的用作日志拦截,还可以自定义:数据验证注解,权限注解,缓存注解等多种用途,但其实现基本都遵循上述步骤。
4.自定义注解+过滤器实现登陆相关
4.1 定义自定义注解@Login
4.2 过滤器匹配
4.3 Controller中具体使用

油炸小波2020-12-07 11:221176
1
举报
分享到:
全部评论 (1)
全部人员
Canon
Canon
2023-06-12 11:00
IP 属地中国香港
666牛的
注册 / 登录 语雀进行评论
1
1470字
语雀
关于语雀使用帮助数据安全服务协议English快速注册
油炸小波
微服务技术栈
搜索
Ctrl + J
首页
目录
大纲
1.前言
2.实现
2.1 定义User
2.2 定义UserDAO
2.3 定义UserService
2.4 定义Controller
2.5 定义自定义注解
2.6 AOP+Controller使用自定义注解
3.总结
4.自定义注解+过滤器实现登陆相关
4.1 定义自定义注解@Login
4.2 过滤器匹配
4.3 Controller中具体使用
Adblocker

相关文章
|
3月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本文介绍Spring Boot中配置管理的常用方法:通过`@Value`读取单个配置,使用`@ConfigurationProperties`封装多个配置项,并实现开发与生产环境配置文件(如application-dev.yml和application-pro.yml)的灵活切换,提升项目可维护性。
|
缓存 算法 网络协议
公众号JSSDK获取signature签名,史上最全,没有之一
公众号JSSDK获取signature签名,史上最全,没有之一
1057 0
|
Linux 容器 Docker
Debian配置系统中文语言及环境
Debian配置系统中文语言及环境
15007 1
|
3月前
|
运维 监控 Java
【Linux基础】开发日常:盘点后端开发中最高频使用的10个Linux命令
本文为后端开发者整理了日常运维中最常用的10个Linux命令,涵盖文件查看、日志监控、进程管理、网络排查等核心场景。从`ls`、`cd`到`tail`、`grep`,再到`ps`、`netstat`、`top`等,结合实际案例讲解高频用法,助你高效应对服务器操作,提升开发效率。
|
消息中间件 Kubernetes 监控
【K8S系列】如何高效查看 k8s日志
【K8S系列】如何高效查看 k8s日志
4309 0
|
3月前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍如何使用Arthas排查线上Java应用CPU占用过高问题,结合thread、watch、jad等指令定位阻塞线程与异常代码,实现无需重启服务的热更新修复,并通过profile生成火焰图进行性能分析,提升线上问题排查效率。
|
10月前
|
Java 应用服务中间件 Linux
Tomcat运行日志字符错乱/项目启动时控制台日志乱码问题
总结: 通过以上几种方法,概括如下:指定编码格式、设置JVM的文件编码、修改控制台输出编码、修正JSP页面编码和设置过滤器。遵循这些步骤,你可以依次排查和解决Tomcat运行日志字符错乱及项目启动时控制台日志乱码问题。希望这些建议能对你的问题提供有效的解决方案。
1892 16
|
3月前
|
消息中间件 监控 Java
RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因Netty多ClassLoader加载多个PooledByteBufAllocator实例,导致堆外内存超限引发OS OOM的排查过程。通过NMT、Arthas等工具分析,发现多个中间件独立加载Netty,各自绕过JVM直接内存限制分配堆外内存,总量远超MaxDirectMemorySize。最终定位RocketMQ客户端为主要内存占用者,建议短期调小Java堆让出内存,长期优化中间件内存使用。
 RocketMQ:底层Netty频繁OS OOM
|
3月前
|
前端开发 API 数据库
如何写好一篇技术方案
本文档为项目需求说明模板,涵盖背景目标、功能模块、流程图、UML设计、API与数据库设计等内容,支持表格、思维导图、时序图等多种视图,便于团队协作与排期管理,提升产研效率。
|
3月前
|
SQL 运维 分布式计算
如何做好SQL质量监控
SLS推出用户级SQL质量监控功能,集成于CloudLens for SLS,提供健康分、服务指标、运行明细、SQL Pattern分析及优化建议五大维度,帮助用户全面掌握SQL使用情况,精准识别性能瓶颈与无效请求,提升日志分析效率与资源治理水平。