注解与反射简单入门,并利用自定义注解编写一个简单的解析程序来帮助理解,入门SpringBoot注解原理

一、反射

1、Class类

概念

Class类就是我们编写的.java文件在编译之后生成.class文件产生的对象,它能够使用forName方法在磁盘中加载一个Java文件并使用newInstance方法生成Java文件中编写的程序对象。
使用Class.forName(“Java文件路径”).newInstance();得到对象的效果类似于使用new关键字new一个对象。不同的是使用Class类可以在程序执行过程中,根据forName方法中的字符串参数,动态加载新的类的对象。

常见用法

获取Class对象:Class c = Class.forName(“Java文件路径”);
生成程序对象:Object o = c.newInstance();
获取方法对象:Method[] methods = c.getMethods();
判断Class是否添加某注解:Boolean annoted = c.isAnnotationPresent(某注解.class);

2、Method类

概念

指的是Class类中的方法,可以使用invoke方法执行。

常见用法

执行method对应的方法:method.invoke(c.newInstance , 自定义可变长参数);
第一个参数是要新建一个程序对象,来执行该方法;后面参数是一个可变长参数,可以传程序对象中的方法对应的参数个数。

获取method对应的方法的参数:Parameter[] parameters = method.getParameters();
判断method对应的方法是否添加某注解:Boolean annoted = method.isAnnotationPresent(某注解.class);

3、Parameter类

概念

指的是类或者方法中的变量,可以使用getName获取当前变量对应的名称,使用getType方法获取对应的类型。

常见用法

获取parameter对应变量的名称:String pName = parameter.getName();

获取parameter对应变量的类型:if( parameter.getType().isInstance(Integer.class) ){ }
如果当前parameter对应的参数类型是Integer,就…

判断parameter对应变量是否添加某注解:Boolean annoted = parameter.isAnnotationPresent(某注解.class);

二、注解

1、注解种类:

三种内置注解: JDK1.5之后JVM内置的注解
@Override:表示重写父类方法;
@Declared:表示当前方法虽然还能正常使用,但有了更好的替代品,已经过时了
@SuppressWarnings():表示省略范围内的警告,参数常用all
常用元注解:
@Target():表示当前注解作用的对象,
常用参数有:Type、Method、Field分别对应类、方法、变量
如:@Target({ElementType.TYPE})

@Retention():表示当前注解作用的时间
最常用的是RetentionPolicy.Runtime,表示在程序运行时也起作用
如:@Retention(RetentionPolicy.RUNTIME)

@Document:表示当前注解是否被加入到使用Javadoc命令生成的文档中
等等…

自定义注解: MyAnnotation
(1)创建注解方法
方法一:New→Java类,选择Kind为Annotation,name为MyAnnotation
方法二:public @interface MyAnnotation{}
(2࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
定义注解原理是通过自己定义注解,将注解应用到需要注解的方法上,然后在拦截器中拦截到注解,进行后续的处理。在Spring Boot中,我们可以使用注解和AOP来实现自定义注解的功能。通过在需要注解的方法上添加注解,并在拦截器中拦截到该注解,可以对方法进行相应的逻辑处理。例如,在需要注解的方法上加上注解@Log("测试自定义注解"),可以实现记录系统日志并入库的功能。通过自定义注解,我们能够清楚地知道如何使用Spring AOP实现自定义注解并进行相应的逻辑处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [分分钟玩转SpringBoot定义注解](https://blog.csdn.net/bieber007/article/details/109695109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [spring aop 自定义注解保存操作日志到mysql数据库 源码](https://download.csdn.net/download/y_h_d/48993109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏鹏展

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值