- 博客(21)
- 收藏
- 关注

原创 spring bean 生命周期 2 (spring5.0版本)
spring初始化1上一篇spring初始化1主要分析了this()方法;本主要讲如下的register(componentClasses)方法; public AnnotationConfigApplicationContext(Class<?>... componentClasses) { this(); register(componentClasses); r...
2020-04-23 16:18:32
167
原创 spring bean 生命周期 3 (spring5.0版本)
spring生命周期2上一篇spring bean 生命周期2主要分析了register(componentClasses)方法; public AnnotationConfigApplicationContext(Class<?>... componentClasses) { this(); register(componentClasses); refresh();...
2020-05-16 17:11:08
243
1
原创 spring-web项目不用配置web.xml的方式原理
springmvc时的入口比较早之前使用springmvc的时候,都要配置个web.xml文件.并且在文件写个servlet的标签,如下: <!-- 配置Spring的前置控制器DispatcherServlet --> <servlet> <servlet-name>spring</servlet-name> ...
2020-05-04 12:35:04
1613
原创 spring bean 生命周期 1(spring5.0版本)
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(DemoApplication.class);分析spring初始化过程跟踪下去 public AnnotationConfigApplicationContext(Class<?>... componentClasses)...
2020-01-16 15:22:36
218
原创 synchronize锁的膨胀及批量重偏向和撤销
一个java对象包含:对象头,数据,对齐填充; 对象头包含:markword(如上图),类类型指针(klass word,如上图),legth(若是数组对象有这个值)现在讲解下上图:上图是jvm64位的对象头在各种锁状态下的信息;正常情况markword占64bit ;klass word 占64bit(一般默认开启指针压缩的:会压缩到32bit)要分析对象头我们可以借助jo...
2019-10-22 17:48:21
1822
原创 并发之证明偏向锁存在
jdk锁的话synchronize在1.5之前都是重量级索,1.6之后有了偏向锁,轻量锁,重向锁;重向锁就是每次获取锁都要直接调用操作系统的函数(这里指linux系统)pthread_mutex_lock();偏向锁是第一次也会调用操作系统函数,之后就不会在调用了;证明之前先说java线程和os线程的关系;目前来说java和os线程是一一对应的;当在java中开一个线程的时候,调用star...
2019-10-15 23:44:01
251
原创 java序列化demo
public class Testtest { public static void main(String[] args) throws IOException,ClassNotFoundException { // Person对象文件路径 String path = "d:/person.dat"; // 创建一个Person对象 ...
2019-10-09 15:57:37
195
原创 netty启动源码5
之前的服务端的channel初始化好了,接下来就会监听连接事件看以下reactor线程的死循环做的事情跟踪代码到nioeventloop类的run方法//事件循环 @Override protected void run() { for (;;) { try { try { ...
2019-10-06 11:57:45
161
原创 netty启动源码4
接着之前讲到 final ChannelFuture regFuture = initAndRegister();接下来讲doBind0(regFuture, channel, localAddress, promise); private ChannelFuture doBind(final SocketAddress localAddress) { //初始化和注册...
2019-10-05 13:48:49
151
原创 netty启动源码3
接着执行如下代码:ChannelFuture future = serverBootstrap.bind(8088).sync();这里是真正的启动源码的地方:这行代码做的事情太多太多太多…了跟踪源码到AbstractBootstrap类的如下方法: private ChannelFuture doBind(final SocketAddress localAddress) { ...
2019-10-04 16:22:59
131
原创 netty启动流程源码2
执行如下代码:serverBootstrap.group(bossGroup,workerGroup)跟踪代码:public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) {//bossGroup,workerGroupsuper.group(parentGroup);Objec...
2019-10-04 12:00:20
110
原创 netty启动流程源码1
public static void main(String[] args) throws InterruptedException { //就是一个死循环,不停地检测IO事件,处理IO事件,执行任务 //创建一个线程组:接受客户端连接 主线程 EventLoopGroup bossGroup=new NioEventLoopGroup(1);//cpu核心数*2 ...
2019-10-04 11:32:34
158
原创 Hotspot虚拟机创建对象过程
首先这里的创建对象指的是正常的不包括数组和class对象; 过程 1:在jvm遇到new指令的时候,会先去检查该类是否已加载,没有的话进行类加载;对象的大小在类加载后就确定了;2:加载后,就要在内存给它一个空间存储吧,但是要jvm怎么给他分配的呢? 如果收集器是标记整理的话,已用的内存是紧凑的排序的这时候只要指针往下一个空闲内存位置指向就行,这叫''指针屏障";...
2019-07-18 20:19:42
265
原创 jvm内存模块
1;程序计数器: 线程私有的,当处理器切换线程的时候,该线程上下文运行到哪都是根据程序技术器的值,来去获取字节码指令.一般来说计数器的值是字节码指令地址;当线程执行native方法的时候,计数器的值为null; 程序计数器这个内存模块是唯一没有内存溢出的情况的2java虚拟机栈:线程私有的,存储的是栈桢,每个方法就是一个栈桢,所以栈桢包含了局部变量表,方法出口,操作数栈.其中...
2019-07-17 17:51:29
288
原创 jdk api
jdk的cloneable接口:object类有clone()方法,要想使用该方法必须实现cloneable接口,不然会报错clone()方法作用是克隆一个本身的对象;java中的assert() 方法:断言方法,方法里是布尔表达式,如果代码里写了assert(false)运行到这行会抛出错误;...
2019-06-29 16:44:05
129
原创 ServletContainerInitializer注册组件应用
servletcontainerinitializer 是servlet3.0以上版本才有的;可以用来插拔式注册组件:原理:Tomcat容器的ServletContainerInitializer机制的实现,主要交由Context容器和ContextConfig监听器共同实现,ContextConfig监听器负责在容器启动时读取每个web应用的WEB-INF/lib目录下包含的jar包...
2019-02-01 17:09:57
526
1
原创 spring-整合mybatis源码注解的方式--简单解析
现在主流的spring整合mybatis用注解@MapperScan("com.cat.mapper")这个注解里包含了注解@Import(MapperScannerRegistrar.class)在spring源码那篇讲到.扫描到注解@import的时候.会处理里面的class这里的MapperScannerRegistrar implements ImportBeanDefinit...
2019-01-11 18:24:58
701
原创 spring 的一些小知识
自动装配:五种形式1、no 默认不使用;2、byName 通过属性的名字的方式查找JavaBean依赖的对象并为其注入;3、byType 通过属性的类型查找JavaBean依赖的对象并为其注入。使用Seter方法为其注入。 4、constructor 与byType的区别在于它不是使用Seter方法注入,而是使用构造子注入。 5、autodetect 在byType和cons...
2019-01-11 16:45:32
210
原创 spring5.0日志体系
市场上日志有很多: jdklogging 简称jul log4j common-logging 简称 jcl slf4j等 其中 jul 和log4j是不可扩展的,好比如java中的一个类jcl 是扩展的 好比如java中的接口 : 源码中 jcl 是for循环去判断 项目中是否有先有log4j .有就用.没有就用jul14(jdk1.4)....
2019-01-07 14:05:20
724
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人