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