模拟spring注解的底层逻辑。

自定义注解:

@Target(ElementType.FIELD) //只能书写在成员变量上
@Retention(RetentionPolicy.RUNTIME) //存活范围:源码阶段、 字节码阶段、 运行时
public @interface 注解名{
public String value();//属性
}

使用注解:

 @注解名("给属性赋的值") //注解的特殊作用: 把value值,赋值给当前成员变量
private String 属性名;//成员变量

实现逻辑:

public void 方法名() throws NoSuchFieldException, InstantiationException, IllegalAccessException {
/*获取Class对象*/
Class<类名> 对象x = 类名.class;
类名 对象y= 对象x.newInstance();//类名指:上述使用注解的类
 Field field = 对象x.getDeclaredField("属性名");//获取成员变量对象
/*判断:成员变量上是否有@Book注解*/
if(field.isAnnotationPresent(注解名.class)){
/*有注解:解析*/
注解名 注解对象z = field.getDeclaredAnnotation(注解名.class);
/*获取注解中的value属性值*/
String 名称1 = 注解对象z.value();
field.setAccessible(true);//私有成员变量,要取消权限检查,公有属性可以不需要这语句。
/*使用反射技术,给私有成员变量赋值*/
field.set( 对象y, 名称1);
        }

    }

相关推荐

  1. 模拟spring注解底层逻辑

    2024-05-10 23:32:04       31 阅读
  2. Spring注解

    2024-05-10 23:32:04       57 阅读
  3. Spring常见注解

    2024-05-10 23:32:04       34 阅读
  4. Spring 核心注解

    2024-05-10 23:32:04       25 阅读
  5. Spring注解配置

    2024-05-10 23:32:04       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 23:32:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 23:32:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 23:32:04       87 阅读
  4. Python语言-面向对象

    2024-05-10 23:32:04       96 阅读

热门阅读

  1. shell脚本变量

    2024-05-10 23:32:04       30 阅读
  2. K8S RBAC 命令行创建

    2024-05-10 23:32:04       33 阅读
  3. 网络安全基础

    2024-05-10 23:32:04       29 阅读
  4. iOS 音量键拍照(延时拍照)

    2024-05-10 23:32:04       25 阅读
  5. ruoyi-vue-pro 使用记录(3)

    2024-05-10 23:32:04       24 阅读
  6. [Android]单元测试和模块测试

    2024-05-10 23:32:04       24 阅读
  7. 修改页签标题 + 页签图表

    2024-05-10 23:32:04       31 阅读
  8. Vue 过渡

    2024-05-10 23:32:04       27 阅读
  9. 2024.5.10

    2024.5.10

    2024-05-10 23:32:04      23 阅读
  10. 基于POSIX标准库的读者-写者问题的简单实现

    2024-05-10 23:32:04       30 阅读