【Spring基础补充】 注解补充(二)(spring的注解有哪些注解)

  本篇文章为你整理了【Spring基础补充】 注解补充(二)(spring的注解有哪些注解)的详细内容,包含有spring注解使用详解 spring的注解有哪些注解 spring中注解的作用 spring的注解如何起作用 【Spring基础补充】 注解补充(二),希望能帮助你了解 【Spring基础补充】 注解补充(二)。

  根据源码中描述,作用域一共有四个。SINGLETON、PROTOTYPE、REQURST、SESSION

  目前主要应用的是前两个:

  SINGLETON:表明当前bean是单例的,每次获取到的对象都是同一个。

  PROTOTYPE:表明当前bean是原型的,每次获取到的对象都不是同一个。

  @Scope("prototype")注解也会导致延迟加载

  @Lazy

  一旦添加当前注解就默认延迟加载。只有在用的时候会初始化。

  准备两个实体类,一个添加@Lazy注解,一个不添加@Lazy注解

  通过控制台的日志输出可以发现添加@Lazy注解的bean不会在容器初始化的时候进行初始化,只有当我们用到的时候才会初始化:

  @Lazy和@Scope

  @Lazy注解会延迟加载bean,但当与@Scope注解一起使用的时候,@Lazy注解会失去作用。

  @Conditional

  这个注解在springboot中的使用还是很多的。判断是否符合条件。

  如果自己使用的话,需要实现接口:

  ​ org.springframework.context.annotation.Condition

  里面就一个返回值为Boolean的方法。

  @Value注解

  1.开启注解读取配置文件

  2.读取值

  3.查看结果

  这些东西不看源码也可以的,但是就是想练练手。

  先测试User类的set方法

  set方法没有被触发,猜测为反射注入,直接进行在无参构造进行debug。

  个人思路:既然是通过反射注入的,那必然是先执行无参构造,再对字段进行赋值。

  先找Bean的创建方法

  定位到自己要查看的bean,继续跟进

  发现了两处进去的方法,经测试,一个创建了bean,另一个是处理的一些processor,但是此时addr此时仍没有被赋值。

  继续往下跟进:

  可以发现,就是在619行进行的数据填充。点进去加断点,继续跟进:

  可以发现经过这个AutowiredAnnotationBeanPostProcessor后,数据被填充了进去。打断点,继续进行debug。

  点进去也就397行和399行可以进行填充数据:

  下一步,397行没有进行数据填充

  399行完成了数据的填充,打断点,继续重新debug

  继续跟进:

  继续

  继续对642行深入:

  可以看到是在这里处理的表达式

  1332行的处理表达式的方法应该是属于某个类【EmbeddedValueResolverAware这个接口可以处理表达式,估计前面用的这个原理差不多】的方法的。分析到这里吧。练练debug。

  以上就是【Spring基础补充】 注解补充(二)(spring的注解有哪些注解)的详细内容,想要了解更多 【Spring基础补充】 注解补充(二)的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: