自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (1)
  • 收藏
  • 关注

原创 jdk动态代理使用

1.定义一个接口A2.定义一个实现类B3.定义一个类C,实现InvocationHandler接口【持有B】4.调用Proxy.newProxyInstance 【参数为A,C】5.从4得到一个最终的代理对象D这里解释一下InvocationHandler里面的invoke方法的第一个参数是什么,这里直接贴出代码,省得再去翻看。先来看看最终生成的关系图:对...

2020-02-02 11:56:57 144

原创 xmlBeanFactory源码解析

一.xmlBeanFactory结构先来看看怎么用我们可以使用xmlBeanFactory把spring使用起来,代码如下: ClassPathResource classPathResource = new ClassPathResource("spring2.xml"); XmlBeanFactory xmlBeanFactory = new XmlBean...

2020-01-14 22:45:01 365

原创 从FileSystemXmlApplicationContext窥探spring源码一角

一.一切从BeanFactory和ApplicationContext说起beanfactorybeanFactory是Spring的一个顶级接口,为什么说他"顶级"?因为他是spring里面最高层次的一个接口,也就是说,他没有继承任何接口,他就是自成一派,就是最大的老大了。如下图:有图有真相,绝对够顶级了,没有继承任何其他接口。实际上这个beanFactory定义了io...

2020-01-10 16:51:48 1844 2

原创 invokeBeanFactoryPostProcessors

/** 1.对用户自定义的BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor做分类。放到两个list。 简称 BeanFactoryPostProcessor=》A BeanDefinitionRegistryPostProcessor=》B 并且执行BeanDefinitionRegistryPostPro...

2019-12-20 09:38:50 227

原创 工厂模式

1.静态工厂模式假设现在有一个牛奶工厂来提供牛奶生产。设置一个牛奶接口,三个实现类 =》 1.蒙牛牛奶 2.伊利牛奶 3.经典牛奶设置一个工厂类,传入参数,使用if和else来判断返回的实现类。这种方式比较 “笨”,如果我们新增一个 “A牛奶”实现类,需要做3个修改1.新增实现类2.修改工厂类,增加if else分支...

2019-12-18 18:57:35 86

原创 内部类

1.普通内部类普通内部类,不能有静态代码块、不能有静态方法、静态变量、静态内部类原因如下:我们不妨用反证法来证明:假设现在有一个普通内部类A,里面有一个静态变量B(其实其他几个都是同个道理,所以这里只用静态变量来举例子),普通内部类的加载,是需要依靠其对应的外部类。如果外部类仅仅只是加载到jvm,没有实例化,内部类是没有被加载到内存中的。因为普通内部类仅仅只是一个普通的成员属性,只有实...

2019-12-16 22:10:27 98

原创 软件设计原则

1、开闭原则开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增...

2019-12-14 11:48:09 98

原创 factoryBean+jdk动态代理,模拟mybatis(顺便整理一下jdk动态代理)

jdk动态代理:package com.luban.源码调试.postprocessor;import com.luban.源码调试.dao.UserMapper;import org.apache.ibatis.annotations.Select;import org.springframework.beans.factory.FactoryBean;import...

2019-12-11 21:32:32 431

原创 @Import

原文:https://www.linuxidc.com/Linux/2019-10/161056.htm@Import 注解@Import注解提供了和XML中<import/>元素等价的功能,实现导入的一个或多个配置类。@Import即可以在类上使用,也可以作为元注解使用。@Target(ElementType.TYPE)@Retention(Retenti...

2019-12-08 11:14:11 142

原创 AnnoationConfigApplicationContext源码解析(不含refresh)

1.AnnotationConfigApplicationContentAnnotationConfigApplicationContent维护了2个属性,有四个构造方法来看看AnnotationConfigApplicationContent的构造方法关系2.AnnotationConfigApplicationContext源码解析(暂时不含refresh...

2019-12-01 11:58:39 152

原创 分析jdk动态代理源码

2019-11-28 12:11:46 73

原创 BeanFactory和FactoryBean

1.factoryBean用法用&+factoryBean的类型,来获取到实现factoryBean的类使用&daoFactoryBean来获取到DaoFactoryBean这个实例用factoryBean上面的注解name,来获取getObject里面的实体类,如下图,getbean的时候 =》 getBean("daoFactoryBean"),可以获取到TempD...

2019-11-27 21:17:32 183

原创 Reference对象源码分析

/* * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * *...

2019-11-24 19:26:24 742

原创 模仿jdk动态代理

package com.luban.proxy;import com.luban.jdk动态代理.Invocation;import java.io.File;import java.io.FileWriter;import java.lang.reflect.Constructor;import java.lang.reflect.Method;import java.net...

2019-11-23 19:09:28 82

原创 cas部署

1.拿到4.0.0war包2.解压tomcat3.war包放webapps下面4.启动tomcat5.进入localhost8080/cas6登录进入 =》 casuser/Mellon7修改登录密码

2019-11-21 16:15:11 182 1

原创 代理1

1.静态代理静态代理,实际上就是我们自个写好,定死一些类,然后这些类按照继承和实现接口的方式来实现一些aop的功能。当然,这些模式适用于固定的流程,比如事先定好的aop规则就是:让类A的Aop=>处理日志,让类B的Aop=>处理数据库,最后到业务逻辑。如果我们想要在这个链条后面增加aop,我们直接重新一个类C的Aop,然后接入类B的Aop。这样就可以了,但是这样的话,是非常固定的,...

2019-11-20 22:41:08 74

原创 aop2

1.环绕通知Proceedingjoinpoint和JoinPoint的区别:Proceedingjoinpoint继承了JoinPoint,Proceedingjoinpoint 实际上就是执行中的连接点,例如:class A { public void query(){} public void query2(){}}那么query和query2会...

2019-11-18 21:25:47 352

原创 apo1

一.aop术语aop概念:aop相对于oop来说,oop是面向对象编程,万物皆对象,我们很多个对象组成一个controller,组成一个model,组成一个mapper,然后不同的层之间相互调用,在这些调用之间,肯定会有一些非常相似的代码,散落在每个角落,我们aop需要做的就是把这些代码维护起来,放到一个统一的切面中。1.连接点 连接点是一个表达式,这个表达式一写出...

2019-11-16 23:59:16 457

原创 springioc2

1.Bean的生命周期回调 1-1.实现InitalizingBean接口,重写afterpropertiesSet方法该方法会在对应实现接口的Bean被实例化之后自动调用。但是这种方式和spring的耦合度非常高,严重依赖于spring的某个接口。 1-2.xml文件指定init方法xml文件注入,在bean标签上写好init属性即可指定对应的in...

2019-11-13 19:02:41 90

原创 ioc1

idea创建父子工程:1.创建一个maven工程2.删掉maven工程下的src文件3.邮件maven工程,新建一个modul,勾选archetype,选择webapp,不断next4.子工程的pom文件,加入spring依赖,引入spring依赖。新建src文件,src下面新建main文件夹。5.刷新maven,会自动刷新为一个web工程,src-main下自动多出...

2019-11-12 11:23:53 139

原创 spring二

请求 => web.xmlDispatchServlet extends HttpServletinit() => 初始化方式,spring应该要在这里先初始化service() =》浏览器访问url,由web容器调用 doGet/doPost =》 controller的逻辑destory() =》 销毁servlet综上,入口就是从xml的拦截器类开始...

2019-11-03 11:50:16 71

原创 注解

注解的定义注解通过 @interface 关键字进行定义。public @interface TestAnnotation {}1它的形式跟接口很类似,不过前面多了一个 @ 符号。上面的代码就创建了一个名字为 TestAnnotaion 的注解。你可以简单理解为创建了一张名字为 TestAnnotation 的标签。注解的应用上面创建了一个注解,那么注解的的使用方法...

2019-11-02 19:26:59 82

原创 spring源码

java就是一个一个对象Bean(咖啡豆),为什么?面向对象编程嘛。从javaBean->Enterprose java beans(EJB)->pojo(spring提出的)spring就受不了了,ejb的各种bean,而且jsp,java代码+html+js+sql语句,挤在一起,难以维护。如上图,ioc就是把所有的bean保存到内存中,然后di就是进行注...

2019-11-02 19:02:16 292

原创 防抖节流

相同点:在一段时间之后粗发对应的事件。区别:防抖会有"延迟",而节流不会有这个特性。防抖防抖其实就是一种延迟触发,注意这个延迟,是重点。 假设现在延迟时间为5s,那么当你第一次触发事件之后,会延迟5s,在这5s内,你在此触发事件,有会延迟5s 也就是说,防抖会有"延迟"这个特性。使用settimeout直接调用事件函数每次触发事件的时候,清空timer。使用se...

2019-10-20 18:01:40 217

原创 手写Vue之MyWatcher

这里的Watcher主要的功能是:重新定义Vue实例的数据域,给每个属性加上一个闭包,这个闭包里面就有一个Dep对象。然后set方法,如果设置的是一个对象,则会重新给这个对象生成Dep对象。如果是一个普通字符串或者其他数据,则不理会。get方法,会跟当前解析的表达式的watcher做一个关联。下面有详细注释代码:/** * 注意:Vue实例的数据域已被重新定义,将会触发set和...

2019-10-13 23:33:11 101

原创 手写Vue之MyObserver

在实例化Vue的时候,会实例化出Observer,Observer的作用就是给数据域的所有数据进行重新定义。observer的代码结构:构造方法ObserveAllPropertyInData该方法会遍历整个数据域,对数据域中的每个属性进行重新定义。defineReactive:可以看到,定义里面多了Dep等对象,这个我们放在Watche...

2019-10-13 18:56:05 192

原创 手写Vue之MyCompile

这一节主要是如何对{{xxx}}表达式和指令进行编译一.代码结构二.主要流程下面我们就按照上面的代码流程来解析。三.dom元素转文档碎片位于MyCompile的prototype中四.编译文档碎片不断递归所有的dom元素,每次到一个dom元素,判断是否是文本节点,如果是,进行表达式编译。如果不是,则取出这个节点的所有属性,如果是事件绑定...

2019-10-13 15:09:21 208

原创 手写Vue之MyVue

这里要实现的功能是,把new Vue({data:{}})里面的data数据进行挂载,直接挂载到this上面,然后通过代理的方式,间接获取和设置到this里面。如下图:_MyData是从传入的参数里面取出的,然后通过给this定义a和v两个属性,间接去操控_MyData里面的数据。function MyVue(option){ this.$option = option...

2019-10-11 15:52:26 280

原创 手写Vue之目标

我们要实现的是,通过id获取到对应的需要做模板解析的dom然后支持下面两种解析方式:1.{{}}花括号解析2.v-xxx等指令的解析通过new MyVue({ el:"", data:{ xxx1:{ } xxx2:"xxx" ...

2019-10-11 15:52:16 87

原创 Vue之文档碎片

一般我们在处理dom的时候,不建议一个一个元素进行修改,而且把需要操作的dom节点一次性从页面取出,放入内存,然后在内存里面对这些dom统一进行操作,然后再挂载回去。这样能够提高性能,而且也让最大限度降低了页面重流和重绘的次数。创建了一个文档碎片,然后把aa里面的所有第一级的子元素加到文档碎片里面。然后遍历整个文档碎片,如果是元素节点的,拼接上内容,最后把文档碎片append回原来的元素上...

2019-10-11 15:52:09 959

原创 实现一个伪数组

1.自定义个数组,并且这个数组必须要拥有Array的【prototype】所有方法2.给你一个半路杀出来的伪数组,让你把它变成一个真数组1.自定义个数组,并且这个数组必须要拥有Array的【prototype】所有方法这一题比较简单,我们可以通过call方法来把真正的函数执行委托给Array对象的prototype原型链上面的方法,如下图的代码,调用add,实际上委托给了p...

2019-10-11 15:52:02 729

原创 手写vue之nodeType

2019-10-11 15:51:54 298

原创 手写vue之defineProperty

vue里面的属性定义都是用Object的defineProperty来实现的,而defineProperty低版本浏览器不支持。这也是Vue为什么会有浏览器限制的问题。语法Object.defineProperty(obj, prop, descriptor)obj:需要定义属性的对象 prop:需要定义的属性 descriptor:属性的描述描述...

2019-10-11 15:51:46 479

原创 左右固定中间自适应

一.浮动左右浮动且w=300px,然后中间啥都不设置即可。【注意:中间啥都不设置,实际上中间这个div是会伸到两边两个浮动的div下面的,只是说,两边的两个div浮动起来,挡住了中间那个div,所以才会显示在最上面。】【大div高度为300px,所以中间div高度默认为300px,然后大div宽度默认继承浏览器宽度,所以中间div的宽度也跟大div宽度一样】二....

2019-10-11 15:51:27 104

原创 !DOCTYPE html

1 作用声明文档的解析类型(document.compatMode),避免浏览器的怪异模式。document.compatMode:BackCompat:怪异模式,浏览器使用自己的怪异模式解析渲染页面。CSS1Compat:标准模式,浏览器使用W3C的标准解析渲染页面。这个属性会被浏览器识别并使用,但是如果你的页面没有DOCTYPE的声明,那么compatMode默认就是Bac...

2019-10-10 17:12:05 132

原创 reflow与repaint

重流和重绘重流就是页面的布局发生了彻彻底底的改变,元素位置或者宽高发生了变化,整个页面需要重新布局,这个时候就需要reflow。重绘可能就是只绘一小部分,而不会绘制全部整个页面。Repaint——屏幕的一部分要重画,比如某个CSS的背景色变了。但是元素的几何尺寸没有变。Reflow——意味着元件的几何尺寸变了,我们需要重新验证并计算Render Tree。是Render Tree的...

2019-10-10 17:08:23 335

原创 阻塞渲染

cssCSS是一种渲染阻塞资源(render blocking resource),它需要完全被解析完毕之后才能进入生成渲染树的环节。CSS并不像HTML那样能执行部分并显示,因为CSS具有继承属性, 后面定义的样式会覆盖或者修改前面的样式。如果我们只使用样式表中部分解析好的样式,我们可能会得到错误的页面效果。所以,我们只能等待CSS完全解析之后,才能进入关键渲染路径的下一环节。需要注意的...

2019-10-10 16:26:55 550 1

原创 renderTree渲染

在这一步,需要把dom树和cssom树给结合起来,生成一棵完整的RenderTree。RenderTree其实很简单,就是遍历dom树,对于每个dom节点,放到cssom树上匹配,最后找到对应的唯一一条规则,附加上去。举个栗子,body{ div{ span{xxxxxx} }}cssom树如下:假设现在要生产renderTre...

2019-10-10 16:20:44 642

原创 css规则树

前面已经介绍过了,dom树和css树合并之后,形成一棵最终的RenderTree,最后这颗RenderTree才会被渲染到页面。比如下面的css会转成下面的树body { font-size: 16px }p { font-weight: bold }span { color: red }p span { display: none }img { float: right ...

2019-10-10 16:14:27 1199

原创 浏览器渲染过程

拿到对应的字节内容,将这些内容转换成字符。浏览器将会根据HTML 的标准把上一步的结果转换成 “标记(Token)”。比如<html>或者<body>这种被尖括号包住的 "标记(Token)" 均有特殊的意义解析HTML生成DOM树。解析CSS生成CSSOM规则树。将DOM树与CSSOM规则树合并在一起生成渲染树。遍历渲染树开始布局,计算每个...

2019-10-10 16:01:51 92

dubbo.xsd资源文件

dubbo.xsd文件,下载只需要2积分,如果需要请直接加wv:Damat1234

2018-04-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除