源码

【spring源码】Spring中BeanPostProcessor何时生效

折月煮酒 提交于 2020-03-11 12:57:22
Spring中BeanPostProcessor何时生效 在Spring中我们有时会使用BeanPostProcessor来增强我们的bean,但BeanPostProcessor又是什么时候被使用的呢,接下来我们一起来跟着spring的源码走一下 1.编写一个入口类 public class Entry { public static void main ( String [ ] args ) { ApplicationContext context = new AnnotationConfigApplicationContext ( MyConfig . class ) ; } } 2. 点击进入构造方法 public AnnotationConfigApplicationContext ( Class < ? > . . . annotatedClasses ) { //1. 在此处向BeanDefinition中注册了6个注解处理器 //2. 此处初始化了系统属性以及环境变量 //3. 注册了注解过滤器 this ( ) ; //紧紧注册配置类的BeanDefinition信息到BeanFactory register ( annotatedClasses ) ; //真正创建对象并调用BeanPostProcessor处理器的方法 refresh ( ) ; } 3.

jwt token认证

北慕城南 提交于 2020-03-11 07:02:36
目录 1、drf-jwt手动签发与校验 2、drf小组件:过滤、筛选、排序、分页 => 针对与群查接口 jwt_token源码分析(入口) 签发token源码分析 校验token源码分析 手动签发token 签发源码小总结: 手动校验token 校验源码小总结 1、drf-jwt手动签发与校验 2、drf小组件:过滤、筛选、排序、分页 => 针对与群查接口 jwt_token源码分析(入口) rest_framework_jwt --> views.py --> ObtainJSONWebToken(JSONWebTokenAPIView) class ObtainJSONWebToken(JSONWebTokenAPIView): serializer_class = JSONWebTokenSerializer 然后到父类中JSONWebTokenAPIView的post方法 def post(self, request, *args, **kwargs): #从get_serializer获取serializer serializer = self.get_serializer(data=request.data) ........ 点击get_serializer def get_serializer(self, *args, **kwargs):

鸿蒙系统的源码,请需要的同志查看

一个人想着一个人 提交于 2020-03-11 06:59:07
https://github.com/Awesome-HarmonyOS/HarmonyOS 其中,只有LiteOS比较多些,具体为:学单片机和嵌入式的同志可以学习下 LiteOS代码入口 LiteOS入口在工程对应的main.c中,基本流程如下: int main(void) { UINT32 uwRet = LOS_OK; HardWare_Init(); uwRet = LOS_KernelInit(); if (uwRet != LOS_OK) { return LOS_NOK; } LOS_Inspect_Entry(); LOS_Start(); } 首先进行硬件初始化 HardWare_Init(); 初始化LiteOS内核 LOS_KernelInit(); 初始化内核例程 LOS_Inspect_Entry(); 最后调用LOS_Start();开始task调度,LiteOS开始正常工作; LiteOS的代码目录结构说明 关于代码树中各个目录存放的源代码的相关内容简介如下: 一级目录 二级目录 三级目录 说明 arch arm arm-m M核中断、调度、tick相关代码 common arm核公用的cmsis core接口 components cmsis LiteOS提供的cmsis os接口实现 connectivity agent_tiny agent

python如何查看函数或者模块的源代码

别等时光非礼了梦想. 提交于 2020-03-11 03:39:06
查看函数的源代码: 一般来说,一个python函数会自带一个 __code__ 变量,其中包含了该函数源码的文件路径。 以 os.path.exists() 函数为例,打印它的源代码文件位置: import os print(os.path.exists.__code__) 打印结果: <code object exists at 0x7fedf258cf60, file "/usr/lib/python3.6/genericpath.py", line 16> 然后使用 cat /usr/lib/python3.6/genericpath.py 或使用文档编辑器可以查看它的源码。 查看模块的源代码: 对于一个module,会自带 __file__ 变量,其内容就是模块源码文件路径。 以os模块为例: import os print(os.__file__) 打印结果: '/usr/lib/python3.6/os.py' 使用 cat 命令或者文档编辑器可以查看其源码。 来源: CSDN 作者: Z-Jeff 链接: https://blog.csdn.net/Jeff_zjf/article/details/104755361

Spring5.0.x源码调试环境搭建

喜你入骨 提交于 2020-03-11 02:43:57
一、实验环境 1.jdk1.8.0_171 2.gradle-5.3.1(Spring源码使用gradle构建的,关于gradle的安装和配置使用,请读者自行上网搜一下,这里不再赘述) 3. IDEA2019.2.4专业版 ,让如有需要可参考我写的相关的破解文档 4.Spring-5.0.x 二、环境搭建 1.进入到GitHub官网并搜索spirng,找到对应的spring-framework工程,点击链接进入,如下图: 图一 2.切换到自己想要的spring源码版本,如下图: 图二 3.获取Git分支链接(我这里是用idea的git拉取源码,大家也可以把源码下载下来,再用idea导入,视个人习惯而定),如下图: 图三 4.在idea中用git拉取spring源码,(笔者已经拉取过spring5.0.x的源码,这里重新下载5.1.x来做演示,笔者编译的版本还是5.0.x的源码)如下图: 图四 图五 4.1 开始下载源码(需要等几分钟,等待下载完): 图六 4.2 下载完弹出导入窗口,如下: 图七 导入源码,点击Yes后弹出导入窗口,如下(之前如果配置过gradle,这里不用作修改): 图八 5.1 点击OK后,开始构建(如果是第一次导入,需要下载依赖,可能需要等待一段时间,耐心等待依赖下载完成),如下图: 图九 5.2 导入完成后,如下图所示,可能spring

Throwable源码详解

安稳与你 提交于 2020-03-10 21:56:47
packagejava.lang; importjava.io.*; /** * *Throwable是所有Error和Exceptiong的父类 *注意它有四个构造函数: *Throwable() *Throwable(String message) *Throwable(Throwable cause) *Throwable(String message, Throwable cause) * */ publicclass Throwable implements Serializable { private static final longserialVersionUID = -3042686055658047285L; /** * Native code saves some indication ofthe stack backtrace in this slot. */ private transient Object backtrace; /** * 描述此异常的信息 */ private String detailMessage; /** * 表示当前异常由那个Throwable引起 * 如果为null表示此异常不是由其他Throwable引起的 * 如果此对象与自己相同,表明此异常的起因对象还没有被初始化 */ private Throwable cause =

JDk1.8HashMap的源码分析

久未见 提交于 2020-03-10 20:27:38
JDk1.8HashMap的源码分析 HashMap用数组存放数据(总结) 调用键的hashCode()获得键的哈希值 用哈希值,计算一个下标值 i 新建Entry对象来封装键和值 Entry对象放在 i 位置 空位置,直接放入 有数据,依次用equals()比较是否相等 找到相等的,覆盖值 没有相等的,链表连接在一起 负载率、加载因子到0.75 新建翻倍容量的新数组 所有数据,重新哈希,放入新数组 jdk1.8 链表长度到8,转成红黑树 红黑树数据量减少到6,转回成链表 hashCode() Object的方法 Object中默认实现是使用内存地址,作为哈希值 如果对象作为键,放入HashMap,应该重写hashCode(),使用属性数据,来计算哈希值 HashMap中根据hash值求得index的 // 先用key求得hash值 static final int hash ( Object key ) { // h = key.hashCode() 为第一步 取hashCode值 // h ^ (h >>> 16) 为第二步 高位参与运算 int h ; return ( key == null ) ? 0 : ( h = key . hashCode ( ) ) ^ ( h >>> 16 ) ; } JDK1.8HashMap的put方法源码如下 /** * (1)

HashMap源码分析(jdk12)

房东的猫 提交于 2020-03-10 15:06:41
1. 初始化 ,hashMap初始化容量默认大小为16,默认负载因子为0.75F 一共有3个构造器 无参 带初始化容量 带初始化容量和初始化加载因子 前两个构造器都是调用第三个构造器。如果没有设置初始化容量或负载因子,以默认值创建。值得一提的是: 在调用构造器创建HashMap时不会立即创建容器,(在jdk1.8之后为 Node<K,V>[] table 用于存储键值对)。而是会在你第一次put元素的时候调用resize方法创建。 容器的大小必须为2的倍数。你在设置初始化容器大小时,如果输入的不是2的倍数,那会自动调整为最接近的大于输入值的2的倍数。主要在tableSizeFor这个方法实现。 该方法,先获取 输入数-1 的32位二进制前导零数目(这里-1理解一下就好了,不-1那对于恰好是2的倍数的,会扩大一倍)。-1无符号右移前导零数目位,这样就得到了最接近 输入数 的 2的倍数-1。最后判断n的大小, 如果n=-1表示cap=1,那就设置容量为1; 如果n>0,如果大于最大容量,那就设置为最大容量,否则设置为n+1。 hashMap有最大容量。2^30 链表长度阈值 当长度大于8时,会从链表转化为红黑树。至于为什么设置为8主要是理想状态下,设置合理的HashMap,根据泊松分布计算得到链表长度达到8的概率极低( 0.00000006)

源码编译安装httpd-2.4.39

若如初见. 提交于 2020-03-10 12:38:49
实验:源码编译安装httpd-2.4.39 环境: centos7.6 apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.39.tar.bz2 1.安装工具包 yum install gcc pcre-devel openssl-devel expat-devel autoconf libtool gcc-c++ ![] 2.解压文件,并将文件按次序放好安装位置 cd /data tar xvf apr-1.7.0.tar.gz tar xvf apr-util-1.6.1.tar.gz tar xvf httpd-2.4.39.tar.bz2 cp -r apr-1.7.0 httpd-2.4.39/srclib/apr cp -r apr-util-1.6.1 httpd-2.4.39/srclib/apr-util cd httpd-2.4.39/ 3.编译安装 ./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with