【spring基础补充】 注解补充(二)-编程思维

@Scope和@Lazy

@Scope

根据源码中描述,作用域一共有四个。SINGLETONPROTOTYPEREQURSTSESSION

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

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。

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/beishanqingyun/p/17167605.html

java基础-跳出循环的4种方式-编程思维

摘要:介绍4种跳出循环的方式,尤其是其中的break 标签,有时候真的会成为工作中的秘密武器。   在实际编程中,有时需要在条件语句匹配的时候跳出循环。在 Java 语言里,由关键词 break 和 continue 控制。Java跳出for或者while循环的四种方式:   continue:跳出当前层循环的当前语句

java的注释和标识符-编程思维

java 的注释规则 1. 单行注释 语法:// 描述://用于当行注释,与JavaScript一样 //这是一个代码注释 2. javadoc注释 语法: /** *注释内容 / 描述:多行注释中可以用“@参数” /** *@Descript:这是一个注释 *@Author:主旋律世界 */ 3. 多行注释 语法

深入理解threadlocal-编程思维

在java的多线程模块中,ThreadLocal是经常被提问到的一个知识点 ,因此只有理解透彻了,不管怎么问,都能游刃有余。 本文主要从以下几个角度来分析理解 1、ThreadLocal是什么 2、ThreadLocal怎么用 3、ThreadLocal源码分析 4、ThreadLocal内存泄漏问题 以下源码均基

从源码messagesource的三个实现出发实战spring·i18n国际化-编程思维

1.前言 互联网业务出海,将已有的业务Copy to Global,并且开始对各个国家精细化,本土化的运营。对于开发人员来说,国际化很重要,在实际项目中所要承担的职责是按照客户指定的语言让服务端返回相应语言的内容。本文基于spring的国际化支持,实现国际化的开箱即用,静态文件配置刷新生效以及全局异常国际化处理。 2.

大白话+画图 从源码角度一步步搞懂arraylist和linkedlist的使用-编程思维

1.说说ArrayList 1.基本原理 ArrayList,原理就是底层基于数组来实现。 01.基本原理: 数组的长度是固定的,java里面数组都是定长数组,比如数组大小设置为100,此时你不停的往ArrayList里面塞入这个数据,此时元素数量超过了100以后,此时就会发生一个数组的扩容,就会搞一个更大的数组,把

react hooks源码深度解析-编程思维

作者:京东零售 郑炳懿 前言 React Hooks是React16.8 引入的一个新特性,它允许函数组件中使用state和其他 React 特性,而不必使用类组件。Hooks是一个非常重要的概念,因为它们提供了更简单、更易于理解的React开发体验。 React Hooks的核心源码主要包括两个部分:React内部的