- 博客(83)
- 问答 (3)
- 收藏
- 关注
原创 【啃啊啃 Spring5 源码】细碎四:核心类总结
阅读spring源码时,有许多 “核心类” 的作用我们了解了,才会阅读的更顺畅。这里总结下我阅读源码时认为比较重要,需要了解的一些 “核心类”注:本文前三节 为参考【Spring4揭秘 基础2】PropertySource和Enviroment系列文章,进行的总结扩展1. 资源配置相关1.1 Resourcepublic interface Resource exten...
2018-09-09 22:33:34
661
原创 【啃啊啃 Spring5 源码】细碎三:AOP两种动态代理的区别
spring 中 AOP是基于 “动态代理” 实现,其采用了两种方式:java代理:采用java内置的代理API实现cglib代理:采用第三方API实现本文主要阐述这两种方式的区别动态代理和静态代理静态代理:编译时将增强代码植入class文件,因为是编译期进行的增强,所以代码运行时效率比动态代理高。使用Aspect可以实现静态代理。动态代理:运行时生成代理类并加载,效...
2018-08-19 13:38:30
955
原创 【Java并发学习五】图解ThreadLocal
简单整理下ThreadLocal的原理,以及它需要注意的内存泄漏。ThreadLocal原理ThreadLocal不多介绍,可看作线程内的局部变量(这个比喻很贴切)。我们平时声明的局部变量的范围一般是方法内的,而ThreadLocal变量的范围是整个线程。我们先来看一段代码demo:public class Test { //可看作线程内声明的局部变量 st...
2018-07-29 19:36:56
1568
1
原创 【啃啊啃 Spring5 源码】细碎二:bean的循环依赖
循环依赖所谓循环依赖,是指在spring中,类A中有一个成员变量为类B,而类B中也有一个成员变量为类A。这会造成在spring初始化容器中的bean时,bean A的初始化需要bean B的初始化的完成,而bean B的初始化又需要bean A初始化的完成。A与B间形成了循环依赖: 循环依赖的解决spring中,循环依赖的解决是有条件的:仅限于singleton(单例)作用域...
2018-07-29 19:36:32
735
1
原创 【Java并发学习四】如何实现一个定时线程池
在【Java并发学习一】如何实现一个线程池上进行扩展,我们想一下如何实现一个定时任务线程池呢?所谓 “定时任务线程池” 就是指放入线程池的任务,可以按照指定的等待周期循环执行。Java里面ScheduledThreadPoolExecutor这个类实现了这种功能。Spring里面的定时任务也是在ScheduledThreadPoolExecutor的基础上扩展而来。如何实现我们...
2018-07-18 07:48:34
6246
原创 @Async、@Transational、AOP 方法内部调用失效的解决方法
遇到过 方法A 内调用Aop修饰的方法B 失效、方法A 内调用@Async修饰的方法C 失效,百度谷歌都没看到一个好的解决,这里分享一个我的解决方案。为什么失效这个百度上很多解答,分析的也很好,其实就是Spring代理机制造成的。简单的说,就是通过spring容器获取的类对象,很多情况下并不是原类,而是被spring修饰过了的代理类。例如你执行 A类对象的方法A.invoke(...
2018-07-16 23:32:27
3885
原创 【啃啊啃 Spring5 源码】细碎一:spring 事件机制
学习spring源码时,看到ApplicationEvent相关的代码觉得熟悉又困惑,深入了解了一下,发现原来是spring事件机制(原谅我之前没用过……)。 这里在【Spring4揭秘 基础1】监听器和事件的基础下进行一下扩展,感谢这篇博文的作者,他的spring基础系列文章让我在阅读源码时,轻松了不少。注:源码部分根据spring-5.0.7版本分析spring事件机制sprin...
2018-07-06 08:48:23
877
原创 【Java并发学习三】内存屏障与synchronized、volatile的原理
注:本文内容会有部分涉及上节的硬件知识:【Java并发学习二】多线程编程的硬件基础知识总结1. 内存屏障上一节讲过,为了解决写缓冲器和无效化队列带来的有序性和可见性问题,我们引入了内存屏障。内存屏障是被插入两个CPU指令之间的一种指令,用来禁止处理器指令发生重排序(像屏障一样),从而保障有序性的。另外,为了达到屏障的效果,它也会使处理器写入、读取值之前,将写缓冲器的值写入高速缓存,...
2018-06-27 23:08:36
2593
4
原创 【Java并发学习二】多线程编程的硬件基础知识总结
这篇简单梳理下与多线程相关的硬件知识,了解它们能够让我们更清晰的了解多线程工作的本质,以及关键字synchronized、volatile、final的实现原理。我们会发现,每一个硬件部件的引入都是为了解决某些问题,然后它们又诞生了新的问题。(程序员就处在这样的永无止境的循环中……)高速缓存1. 缓存概念先来说说缓存的概念,现在的处理器运行速度远大于内存的读写速度的,为了填...
2018-04-22 13:58:49
595
原创 Simple Java—Compiler and JVM(二)为什么域不能被“重写”
为什么域不能被重写这篇文章解释了Java中的一个基础概念——隐藏域1. Java中域能被重写吗?让我们看一下下面的例子package oo;class Super { String s = "Super";}class Sub extends Super { String s = "Sub";}public class FieldOverri...
2018-04-16 12:41:56
276
原创 【Java并发学习一】如何实现一个线程池
前言和设计模式一样,打算花三个月的时间,结合《Java并发编程实战》一书,来总结下并发方面的知识。第一章从线程池的原理开始总结,希望自己能坚持下来,加油!1. 如何实现一个线程池?线程池的概念这里不多说,在讲它的原理前,我们先自己想一下,如果我来写,那如何实现一个线程池?1.1 线程池的重要变量首先要定义一个存放所有线程的集合; 另外,每有一个任务分配给线程池,我们就
2018-01-17 23:27:43
12851
2
原创 Java迭代foreach原理解析(java.util.ConcurrentModificationException的原因)
java.util.ConcurrentModificationException、Java迭代器
2016-02-16 19:34:33
4668
1
翻译 Simple-Java—Collections(一)Java高效计数器
Translate from Efficient Counter in JavaJava中的高效计数器你可能经常需要统计一段文本或数据库中某些东西(例如单词)的出现频率。在Java中,使用HashMap可以很简单的实现这么一个计数器。 这篇文章将会比较几种实现计数器的方法,最后,得出最有效率的一个。1. 简单计数器String s = "one two three two three three"
2016-02-04 15:23:56
463
翻译 Simple Java—Strings and Arrays(五)如何在java中有效率的检查一个数组中是否有某值?
如何在java中有效率的检查一个数组中是否有某值?
2016-01-28 17:50:15
547
1
空空如也
hibernate4.3在servlet中的无法找到ServiceRegistry
2016-04-30
stackoverflow上面的java的域不能“重写”问题
2016-02-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人