源码

bootstrap源码学习与示例:bootstrap-tooltip

若如初见. 提交于 2020-03-05 20:31:29
tooltip是bootstrap第二复杂的组件,近三百行。配置项比较多。并且需要手动初始化。另一个特点是没有自定义事件。 名称 类型 默认 描述 animation 布尔值 true 为工具提示添加一个淡入的过渡。 placement 字符串或函数 'top' 工具提示的位置:top | bottom | left | right。 selector 字符串 false 如果提供了selector,将对符合条件的某个或多个元素启用工具提示。 title 字符串或函数 '' 如果'title'属性不存在的话,就使用该值做为默认的标题。 trigger 字符串 'hover' 工具提示的触发方式:鼠标经过(hover) | 获得焦点(focus) | 手动触发(manual) delay 数字或对象 0 显示和隐藏时的延迟时间(以毫秒计) 如果提供的是一个数字,延迟就会同时被应用到显示和隐藏。 如果是一个对象,其结构就是: delay: { show: 500, hide: 100 } 一般来说它是用于内联元素,链接或图片什么的,通过把其title抽取出来构成浮动提示层。比如下面的HTML结构: <p class="muted" style="margin-bottom: 0;"> “这是我的第一次英文访问,很抱歉它不够严谨,但是我不得不这么做,不只因为采访时间限制

Glide源码解析一,初始化

爱⌒轻易说出口 提交于 2020-03-05 20:08:19
转载请标明出处: https:////www.cnblogs.com/tangZH/p/12409849.html Glide作为一个强大的图片加载框架,已经被android官方使用,所以,明白Glide的加载流程以及原理对加深我们对glide的理解是很重要的。 本文基于glide 4.11 Glide.with(this).load("").into(new ImageView(this)); 我们从这一句入手,先看看Glide的初始化过程,也就是Glide.with(this)这个方法。 一、单例实例化 可以看到里面有多个重载方法,最常用的是这个,这些方法最终返回的是 RequestManager 。 都一致调用了 getRetriever(...).get(view) 。 我们看一下 getRetriever(...) 里面做了什么。 getRequestManagerRetriever()返回的是一个RequestManagerRetriever,我们主要看的是Glide.get(context) 可以看到Glide.get(context)里面进行了初始化的操作,它是我们熟悉的单例模式。最终会调用 二、GlideModule配置加载 上面的get方法中,我们需要注意这一句: GeneratedAppGlideModule annotationGeneratedModule

【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)

牧云@^-^@ 提交于 2020-03-05 19:59:28
doCreateBean方法 上文 【Spring源码分析】非懒加载的单例Bean初始化过程(上篇) ,分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的。先贴一下AbstractAutowireCapableBeanFactory的doCreateBean方法代码: 1 protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args) { 2 // Instantiate the bean. 3 BeanWrapper instanceWrapper = null; 4 if (mbd.isSingleton()) { 5 instanceWrapper = this.factoryBeanInstanceCache.remove(beanName); 6 } 7 if (instanceWrapper == null) { 8 instanceWrapper = createBeanInstance(beanName, mbd, args); 9 } 10 final Object bean = (instanceWrapper != null ? instanceWrapper

事物、源码学习,spring-tx

邮差的信 提交于 2020-03-05 18:37:59
标签式配置,主要是标明回滚方法,超时,是否只读,以及隔离级别(不同session间事物的可见性,读取未提交,读取已提交,可重复读,序列化)及传播属性(定义了调用关系的事物传播行为 PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认);PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务;PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常;PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务;PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务;PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常;PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行) 具体实现 TransactionAspectSupport,基本原理就是读各种配置,加载对应的事物管理器,根据事物标签,处理各种传递、可见性、执行、回滚、异常等情况;事物间传递用TransactionInfo对象保留现场 protected Object invokeWithinTransaction(Method method, Class<?> targetClass, final

spring源码解析之IOC容器(三)——依赖注入

帅比萌擦擦* 提交于 2020-03-05 17:46:20
  上一篇主要是跟踪了IOC容器对bean标签进行解析之后存入Map中的过程,这些bean只是以BeanDefinition为载体单纯的存储起来了,并没有转换成一个个的对象,今天继续进行跟踪,看一看IOC容器是怎样实例化对象的。   我们都使用过以下代码: 1 FileSystemXmlApplicationContext context=new FileSystemXmlApplicationContext("bean.xml"); 2 User user=context.getBean("user",User.class);   这样我们就能获取到user对象了,所以,不难想象,这个getBean方法就是实例化对象的入口。接下来我们就以这个方法为切入点,来探究IOC容器中bean的实例化过程。getBean方法是在FileSystemXmlApplicationContext的基类AbstractApplicationContext中定义的,代码如下: 1 public <T> T getBean(String name, Class<T> requiredType) throws BeansException { 2 assertBeanFactoryActive(); 3 return getBeanFactory().getBean(name, requiredType)

Android Studio -- 关联源码

霸气de小男生 提交于 2020-03-05 17:22:50
1,昨天刚把SDK升级到25,然后准备开始 新的一年码代码,结果发现查看源码的时候出现了一堆的“ throw new RuntimeException("Stub!");” 网上搜了一下发下是没有关联源码,再看一下我们的SDK,的确是没有安装,那么我们怎么去关联我们的源码呢? 解决:首先打开C:\Users\用户.AndroidStudio2.1\config\options 这个路径,找到jdk.table.xml这个文件, 你会发现有好多个API版本,他都有相关配置,这里只是截取了API 24 和API 25 可以看到,我们24的sourcePath有对应sdk的源码路径,而25的却没有,所以我们首先要去我们的sdk中看一下有没有25的源码 刚好我们下下来了,所以在25中加入如下代码: <sourcePath> <root type="composite"> <root type="simple" url="file://D:/sdk/sources/android-25" /> </root> </sourcePath> 看一下效果   这样我们就又可以看源码了 See You Next Time 来源: https://www.cnblogs.com/wjtaigwh/p/6376940.html

spring源码之—Assert.notNull

半腔热情 提交于 2020-03-05 16:04:15
org.springframework.util.Assert Assert翻译为中文为"断言".用过JUNIT的应该都知道这个概念了. 就是断定某一个实际的值就为自己预期想得到的,如果不一样就抛出异常. Assert经常用于: 1.判断METHOD的参数是否属于正常值. 2.JUNIT中使用. 我发现SPRING1.2.6里面有BUG 请看: org.springframework.core.io.support.EncodedResource中 public EncodedResource(Resource resource, String encoding) { Assert.notNull("Resource is required"); this.resource = resource; this.encoding = encoding; } Assert.notNull("Resource is required"); 这句应该为 Assert.notNull(resource,"Resource is required"); 不然resource都没传过来,还断什么言啊,呵呵. ------------------------------------------------------------------------ 上面是在网上看到了

游戏源码下载

假装没事ソ 提交于 2020-03-05 15:11:18
在游戏开发的学习或工作中,利用完好的游戏源码可以事半功倍,不仅可以逆向学习开拓思维,也可以大大减少设计周期。 手游游戏是我们很多年轻人爱玩的,那想要创造游戏,游戏源码在哪里找呢? 下面整理了我平时经常使用的一个网站,推荐给大家 爱给网(分类细,质量高,4299个,QQ登录,免费下载) 登陆问题:qq一键登录,懒人福音。 价格问题 : 首次注册送50铜币,一个游戏源码20 个铜币,且每天系统会自动送20个铜币给你,下载相当于不要钱了; vip 39元 = 600个铜币,折合0.78一个,充值后还每天送30个铜币,性价比之王。 特色:资源质量佳,资源的分类体验好 可以浏览资源压缩包,了解资源里面的内容是否是自己想要的 来源: oschina 链接: https://my.oschina.net/u/4472665/blog/3188561

JVM源码分析之不可控的堆外内存

我怕爱的太早我们不能终老 提交于 2020-03-05 13:27:10
概述 之前写过篇文章,关于堆外内存的, JVM源码分析之堆外内存完全解读 ,里面重点讲了DirectByteBuffer的原理,但是今天碰到一个比较奇怪的问题,在设置了-XX:MaxDirectMemorySize=1G的前提下,然后统计所有DirectByteBuffer对象后面占用的内存达到了7G,远远超出阈值,这个问题很诡异,于是好好查了下原因,虽然最终发现是我们统计的问题,但是期间发现的其他一些问题还是值得分享一下的。 不得不提的DirectByteBuffer构造函数 打开DirectByteBuffer这个类,我们会发现有5个构造函数 DirectByteBuffer(int cap); DirectByteBuffer(long addr, int cap, Object ob); private DirectByteBuffer(long addr, int cap); protected DirectByteBuffer(int cap, long addr,FileDescriptor fd,Runnable unmapper); DirectByteBuffer(DirectBuffer db, int mark, int pos, int lim, int cap,int off) 我们从java层面创建DirectByteBuffer对象

JDK 1.8 HashMap 扩容源码详解

独自空忆成欢 提交于 2020-03-05 13:19:02
作为开发人员,千万不能停留在实现功能上,一定要提升到性能方面上。这需要我们不断的实践,学习源码, 根据底层实现原理,来做出最好的操作。 就HashMap而言,一定是我们常用的集合,它有着查询速度是 O(1) 的特点,特就是快速获取键值对结果。 但是如果不去读源码,就不会知道它的默认的大小是capcity 16,负载因子是 0.75 ,在hashmap中存放 超过 caticy * 负载因子,则需要去扩容,扩容的时候,是需要消耗很多资源, 因为扩容是扩了两倍 ,然后需要将原来的复制到新的扩容后的数组里边。 这个慢的体验就是你想要 put 的时候,如果触发了 扩容 resize() ,则需要等到扩容才能添加进去,注意,现在1.8的源码里边,扩容,就直接把原来的数据重新hash 然后给到扩容后的数组。 接下来看源码: final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; int oldCap = (oldTab == null) ? 0 : oldTab.length; int oldThr = threshold; int newCap, newThr = 0; if (oldCap > 0) { if (oldCap >= MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE;