11 OkidoGreen

尚未进行身份认证

暂无相关简介

等级
TA的排名 14

Spring之基于Java类的配置bean的加载注册流程

描述Spring Bean定义的三种方式:基于XML的配置 基于注解的配置,在类中加入如下注解通过包扫描加载注册bean: @Component:当对组件的层次难以定位的时候使用这个注解 @Controller:表示控制层的组件 @Service:表示业务逻辑层的组件 @Repository:表示数据访问层的组件基于Java类的配置:使用...

2020-02-26 15:00:47

spring之class读取生成元数据流程

描述在ClassPathBeanDefinitionScanner中看到spring通过扫描给定的包路径,获取到对应的class资源并判断是否生成BeanDefinition注册到IOC容器中,接下来根据源码来看spring是怎么通过class资源生成元数据ClassPathBeanDefinitionScanner分析中看到 MetadataReaderFactory.getMet...

2020-02-26 14:57:46

Spring元数据Metadata的使用,注解编程之AnnotationMetadata,ClassMetadata、MetadataReaderFactory

前言Spring在2.0的时候就支持了基于XML Schema的扩展机制,让我们可以自定义的对xml配置文件进行扩展(四大步骤,有兴趣的可以自己学习),比如鼎鼎大名的Dubbo它就扩展了xml,用它来引入服务或者导出服务。随着Spring3.0+的发展,xml慢慢的淡出了我们的视野,特别是Spring Boot的流行让xml彻底消失,所有的xml配置都使用注解的方式进行了代替。有的人说注解编...

2020-02-26 13:44:17

注解驱动编程-MetadataReader以及多层次@Component注解派生及解析原理

Spring版本:5.0.6.RELEASE众所周知,Spring在扫描需要注入的Bean的过程中 会从 如下链路进行查找:1、ClassPathBeanDefinitionScanner#doScanprotected Set<BeanDefinitionHolder> doScan(String... basePackages) { Assert.notEmpty...

2020-02-26 13:13:13

Spring可扩展的XML Schema机制

�可扩展的XML Schema机制从Spring2.0开始,Spring提供了XML Schema可扩展机制,用户可以自定义XML Schema文件,并自定义XML Bean解析器,并集成到Spring Ioc 容器中完成XML自定义扩展,需要下面几个步骤:可扩展XML Schema机制.png 创建一个 XML Schema 文件,描述自定义的合法构建模块,也就是xsd...

2020-02-26 10:39:05

Spring 注解编程之模式注解

Spring 框架中有很多可用的注解,其中有一类注解称模式注解(Stereotype Annotations),包括 @Component,@Service,@Controller,@Repository 等。只要在相应的类上标注这些注解,就能成为 Spring 中组件(Bean)。需要配置开启自动扫描。如在 XML 中配置 <context:component-scan base-...

2020-02-26 10:34:26

Spring 注解编程之 AnnotationMetadata

这篇文章我们主要深入AnnotationMetadata,了解其底层原理。Spring 版本为 5.1.8-RELEASEAnnotationMetadata 结构使用 IDEA 生成AnnotationMetadata类图,如下:AnnotationMetadata存在两个实现类分别为StandardAnnotationMetadata与AnnotationMet...

2020-02-26 10:28:20

轻量级锁(锁重入的实现方式)

转自可参考:死磕Synchronized底层实现--概论死磕Synchronized底层实现--偏向锁死磕Synchronized底层实现--轻量级锁死磕Synchronized底层实现--重量级锁轻量级锁获取流程下面开始轻量级锁获取流程分析,代码在bytecodeInterpreter.cpp#1816。CASE(_monitorenter): { oop lo...

2020-02-25 18:22:54

Java中的偏向锁,轻量级锁, 重量级锁解析

参考文章Java并发编程:Synchronized底层优化(偏向锁、轻量级锁) 聊聊并发(二)Java SE1.6中的Synchronized Lock Lock Lock: Enter! 5 Things You Didn’t Know About Synchronization in Java and Scala Synchronization and Object Locking...

2020-02-25 18:13:43

Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)

一、重量级锁  上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchron...

2020-02-25 14:58:54

Java并发编程:Synchronized及其实现原理

一、Synchronized的基本使用  Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。从语法上讲,Synchronized总共有三种用法:  (1)修饰普通方法  (2)修饰静态方法  (3)修饰代码块...

2020-02-25 14:51:43

锁的升级打怪:通俗易懂讲解偏向锁、轻量级锁和重量级锁

PART0:PART1:首先通过一个小例子来解释一下三种锁的区别:假如家里只有一个碗,当我自己在家时,没有人会和我争碗,这时即为偏向锁状态当我和女朋友都在家吃饭时,如果女朋友不是很饿,则她会等我吃完再用我的碗去吃饭,这就是轻量级锁状态当我和女朋友都很饿的时候,这时候就会去争抢这唯一的一个碗(贫穷的我)吃饭,这就是重量级锁状态PART2:我是一个线程,生活...

2020-02-25 13:25:14

浅谈偏向锁、轻量级锁、重量级锁

为了换取性能,JVM在内置锁上做了非常多的优化,膨胀式的锁分配策略就是其一。理解偏向锁、轻量级锁、重量级锁的要解决的基本问题,几种锁的分配和膨胀过程,有助于编写并优化基于锁的并发程序。内置锁的分配和膨胀过程较为复杂,限于时间和精力,文中该部分内容是根据网上的多方资料整合而来;仅为方便查阅,后面继续分析JVM源码的时候也有个参考。如果对各级锁已经有了基本了解,读者大可跳过此文。隐藏在内置...

2020-02-25 13:08:37

Java 的几把 JVM 级锁

在计算机行业有一个定律叫"摩尔定律",在此定律下,计算机的性能突飞猛进,而且价格也随之越来越便宜, CPU 从单核到了多核,缓存性能也得到了很大提升,尤其是多核 CPU 技术的到来,计算机同一时刻可以处理多个任务。在硬件层面的发展带来的效率极大提升中,软件层面的多线程编程已经成为必然趋势,然而多线程编程就会引入数据安全性问题,有矛必有盾,于是发明了“锁”来解决线程安全问题。在这篇文章中,总结了 J...

2020-02-24 22:31:29

提升性能,避免伪共享(False Sharing)-缓存行填充7个long

缓存系统中是以缓存行(cache line)为单位存储的。缓存行是2的整数幂个连续字节,一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。缓存行上的写竞争是运行在SMP系统中并行线程实现可伸缩性最重要的限制因素。有人将伪共享描述成无声的性能杀手,因为从代码中很难看清楚是否会出现伪共享。为...

2020-02-24 21:47:39

JDK8系列之LongAdder解析

前言最近公司的项目在陆续升级jdk8,正好想起之前有人问我的jdk8中新增的LongAdder类和AtomicLong的区别,就忍不住想探究一番。源码解析首先看一下类的定义public class LongAdder extends Striped64 implements Serializable然后来看一下类的属性和方法这里让我困惑的一个问题是LongAdder...

2020-02-24 21:44:23

Maven optional关键字透彻图解

例子:项目A的POM文件有如下依赖声明,optional表示该依赖只影响项目A, 如果有项目B依赖了A,则这两个依赖不会被传递;因此如果B依赖了A,并且只用到了mysql,则需在B的POM中显示声明依赖mysql-connector-java即可<dependencies> <dependency> <groupId>mysql...

2020-02-24 10:56:02

java内存屏障

为什么会有内存屏障每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一个变量的缓存值不同。 用volatile关键字修饰变量可以解决上述问题,那么volatile是如何做到这一点的呢?那就是内存屏障,内存屏障是硬件层的概念,不同的硬件平台实现内存屏障的...

2020-02-22 19:43:09

Volatile 单例DLC情况 说明

简介是cpu指令作用保证指令执行的顺序,内存屏障前的指令一定先于内存屏障后的指令 将write buffer的缓存行,立即刷新到内存中重排列内存屏障保证指令的顺序?因为cpu和编译器会进行优化而导致指令重排列,单线程情况下,没什么影响,而多线程时,会发生与我们代码执行顺序不一样的结果。Q:CPU为何要重排序内存访问指令?在哪种场景下会触发重排序?CPU为何要重排序内存...

2020-02-22 19:29:10

Volatile 原理及摘要内容,DLC单例、内存屏障、JVM及底层实现

内存屏障一堵墙,上下的指令不能重排序比如 storestoreBarrier,屏障上下的2个store不能重排序保证volatile写操作前后的指令。都有屏障,无法重排序...

2020-02-22 18:11:45

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。