Spring 注解的原理

Spring 注解的原理
转自

https://blog.csdn.net/u010987379/article/details/52152795
https://www.cnblogs.com/lsx1993/p/4793124.html

Spring 注解原理

看完上面的文章,简单做一下总结,第一次发博客,聊一下spring注解的原理,如果有不对的地方请指正(如有侵权,立马删除,请联系我)

当我们想了解一个注解的时候,不妨打开它看看,比如说这个 @RestController注解,这个注解是一个复合注解,它包含了三个元注解和两个spring注解。
在这里插入图片描述
在这里插入图片描述
我们这里不主要讲这三个元注解,元注解总共有四个,
*分别是@Target,@Retention,@Documented,@Inherited
*

  • @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
  • ElemenetType.CONSTRUCTOR 构造器声明
  • ElemenetType.FIELD 域声明(包括 enum 实例)
  • ElemenetType.LOCAL_VARIABLE 局部变量声明
  • ElemenetType.METHOD 方法声明
  • ElemenetType.PACKAGE 包声明
  • ElemenetType.PARAMETER 参数声明
  • ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
  • @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
  • RetentionPolicy.SOURCE 注解将被编译器丢弃
  • RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
  • RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
  • @Documented 将此注解包含在 javadoc 中
  • @Inherited 允许子类继承父类中的注解

spring注解

打开其中的@Controller 发现和上一个接口类似的结构,@interface这个东东不是一个接口,和接口类似,当我们用一个@interface修饰我们的类的时候,证明我们这个类是一个注解,并且继承了java.lang.annotition.Annotition
在这里插入图片描述
Annotation其实是一种接口。通过Java的反射机制相关的API来访问Annotation信息。相关类(框架或工具中的类)根据这些信息来决定如何使用该程序元素或改变它们的行为。Java语言解释器在工作时会忽略这些Annotation,因此在JVM中这些Annotation是“不起作用”的,只能通过配套的工具才能对这些Annotation类型的信息进行访问和处理。

这个时候我们就应该想到了 spring注解的启动原理应该是这样的;
1、spring IOC容器启动的时候,根据我们指定的路径下去扫描我们的类,或者是直接扫描当前路径下的类;
2、在java中我们可以通过 Object obj = new Object()的方式来创建一个对象;那么spring 其实也是一样的,当我们的程序启动,告诉容器路径,它去指定的地方去加载bean,利用java的反射将我们类new出来,其实这个过程就是“依赖注入”,那么当我拿到这个对象的时候,通过getClass()方法得到它的类,再通过getAnnotations()方法得到这个类的注解;
在这里插入图片描述
这是我定义的RestController 对象
在这里插入图片描述
这是我的接口,通过这种
Annotation[] annotation = this.getClass().getAnnotations();
控制台就可以打印出这个class上面有些什么注解了
在这里插入图片描述
3、这个时候我们就可以想到,这个注解其实就是spring在扫描我们的类的时候,拿到我们的class,然后通过这个方式得到了我们在class上面的注解,spring根据自己定义的规则,解析这个注解,以达到相应的效果
4、同理在 Method 上也可以getAnnotations();
5、这样我们就可以在加载bean的时候实现 ,通过反射实例化我们的bean,然后通过getAnnotations()方法得到类和方法上的注解,然后根据自己定义的规则去实现各个注解需要做什么事情。

第一次发博客,如有侵权,请联系我,如有不对,请指正;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值