08 2018 档案
摘要:一 .概述 在spring之中,每一个bean都有其自己的声明周期,我们最为常用的有两个声明周期. 在注解的情况下,我们可以使用@Scope来标记这个bean的声明周期. 二 @Scope 在这里我们不用再说声明周期的具体的概念了.
阅读全文
摘要:一 .概述 在我们之前使用spring的时候,我们通常会配置一个组件扫描器帮助我们将spring注解标记的bean加入到IOC容器之中,当我们不再使用xml的形式的时候, 我们就可以使用包扫描注解完成这个任务. 二 .包扫描注解 我们一般会将这个注解加入到一个配置类之中,在这里说明一下该注解的核心作
阅读全文
摘要:一 . 概述 在之前我们使用spring的时候,大多数的时候都是通过xml进行bean的配置. 在spring3.0之后,出现了编程式的配置,在后面的springboot之中被大量的采用, 本节,我们学习给容器之中添加Bean. 二 .@Configuration 注解 本注解的作用主要有两个: 我
阅读全文
摘要:一 .概述 在前面,我们说到了volatile关键词可以保证可见性和有序性,本节,首先展示一个例子. 我们在上面的例子之中,创建两个线程,使用一个标记位来终结一个线程的执行,但是当我们运行的时候,我们发现我们根本就不能终结这个线程的执行, 原因,在上面我们已经分析过了,就是可见性的问题. flag
阅读全文
摘要:一 . 概述 在之前,我们使用synchronized关键词解决了原子性的操作,本节我们分析一个JVM内存模型导致的另外的两个问题. 二 . 可见性 为了加速线程的运行的速度,JVM的内存模型中设置了线程栈中的缓存,当一个线程使用了堆内存的数据的时候,首先会将这个数据缓存到线程栈之中, 当这个数据是
阅读全文
摘要:一 .概述 当我们实现了原子性操作的时候,我们又会遇到一个问题,那就是线程之间通信的问题.所谓的线程通信,指的就是线程间的执行顺序是需要进行一定的控制的. 我们拿最经典的生产者和消费者模型进行说明: 在这里,我们使用wait()和notify()方法进行实现. 但是我们发现了一个问题,如果我们实现线
阅读全文
摘要:一 .概述 在前面,我们说到了java提供了synchronized关键词帮助我们实现一个可重入的独占锁的概念. 本节,我们讨论这个关键词的使用. 二 .使用方式 synchronized关键词可以出现在三个地方 [1]静态方法上 [2]实例方法上 [3]同步代码块上 从本质上说,我们其实没有必要分
阅读全文
摘要:一 .概述 线程依赖于进程分配资源,因此线程对变量的操作就变得更加的简单,我们可能会使用不同的线程对同一个变量进行操作,这就可能代理线程的安全性问题. 线程的安全性问题归根结底就是正确性问题,如果我们无法对变量进行原子性操作,那么变量就可能出现不一致的状态,因此我们的程序的结果就会出现问题. 在ja
阅读全文
摘要:一 .概述 在前面,我们重点说明了几个Thread的API,本节我们将一些需要注意的APi进行一下分析. 二 .sleep()方法 该方法会让线程进行睡眠,当时间片过去之后,线程就会进入到runnable状态. 当然,这个方法是可以被打断的. 下面演示一下这个方法: 上面的例子之中,我们让线程睡眠了
阅读全文
摘要:一 .概述 join()方法可以让一个线程等待另外一个线程运行结束,同时join()方法具有可打断性,也就是说,在一定的时间点,线程可以不再等待继续执行. 下面我们首先看一下这个例子. 我们发现,执行的结果表明,主线程是在子线程完全执行完毕才会执行的. 通过这个例子,我们可以知道,主线程是会等到子线
阅读全文
摘要:一 .概述 在前面我们说到过守护线程的特点,就是守护线程的存在必须要有一个非守护线程的存在. 利用这个特性,我们常常使用守护线程做垃圾回收,心跳检测的后台的服务. 本节,我们利用守护线程实现一个线程终结的方法. 二 .利用守护线程的特性,实现线程的终结 我们运行上面的代码,主线程在休眠3秒之后终结,
阅读全文
摘要:一 . 概述 在我们之前的应用之中,我们常常需要面临的一个问题就是面对各种出现null的情况. 比如我们的方法的参数是否为null,我们的方法的返回值是否是null. 我们常见的一种情景就是忘记掉这些特殊的情况,这会导致我们的应用在特殊的情况下挂掉. JDK吸取了guava之中的傻瓜式防护的策略,让
阅读全文
摘要:一 . PreCondition 我们使用guava帮助我们实现断言. 看下面的代码: 其实在JDK8之中,已经有了一个Objects就可以帮助我们实现断言了. 看下面的方法:
阅读全文
摘要:一 .概述 在前面的一节,我们说明了连接器的作用,本节我们学习一下使用分割器来实现一些特定的功能. 二 . 创建分割器 和前面的方式一样,我们也是使用on()方法创建Splitter对象 我们看到分隔符可以是字符串,还可以是正则表达式等. 三 .常用的方法
阅读全文
摘要:一.概述 主键的问题在mybatis-plus之中给出了一个解决方法,我们可以指定一个主键生成策略. 本节我们来说明一下主键的问题. 二 .主键生成策略 我们看一下,这里已经有了我们常用的主键生成策略了. 我们可能常用的就是auto策略,或者是全局唯一的注解,或者是UUID. 上面的主键生成策略都是
阅读全文
摘要:一 .概述 在前面,我们基本的使用了mybatis-plus,现在我们做一下全局配置信息的介绍. 在上面,我们配置了一个全局的配置Bean,我们在配置完之后还需要将这个Bean注入到SqlSessionFactory之中. 在面的配置之中了我们就实现了全局配置信息的配置了.
阅读全文
摘要:一 .概述 之前很多时候自己是挺不喜欢mybatis-plus的,但是在做业务代码的时候,发现即使使用了一些封装器之后,依然不能很好的解决单表的crud. 其实,单表的crud在代码之后出现的频度是最高的,因此抽出一定的时候学习一下mybatis-plus. 二 .环境的搭建 标准的spring环境
阅读全文
摘要:一. 概述 现在做的很多企业级的项目之中,用户都希望将一部分的数据转存到excle作为一种媒介来处理. 当然,现在的开发类库之中如poi等操作都是比较麻烦的,另外还有一个严重的问题,就是容易出现OOM问题(内存溢出). 在github之中,发现了阿里的easyexcle项目,现在还不是很成熟,看作者
阅读全文
摘要:一.概述 本类的名称的含义就是连接器,可以帮助我们实现数据(对象)的连接. 二 . 对象的创建 创建一个Joiner对象,我们可以使用on()方法,含义就是会用这个分隔符进行连接数据. 我们可以发现我们实际上都是使用字符来完成连接器的. 三 . 连接方法 Joiner的连接方法核心就是join()方
阅读全文
摘要:一.方法的分析 首先我们看下面的一个例子: 在上面的代码之中,最为奇怪的就是我们的一个实例方法之中的第一个参数是this. 其实这个this就是实例方法和静态方法最大区别了,一个实例方法之中,在编译的时候,会自动传入一个this的参数,参数的类型就是本类的类型. 再了解了上述的事实之后,我们来看一下
阅读全文
摘要:一 .概述 在前面我们提出了lambda的本质,但是还有另外一个问题需要解释,就是lambda表达式的类型. 二 .lambda表达式的类型 首先我们看一下下面的例子: 看到上面的代码,我们发现了一个问题,相同的lambda表达式却可以成为不同的类型,这很不可思议. lambda表达式的类型匹配任何
阅读全文
摘要:一 .概述 集合是我们java程序员每天都需要的工具,没有了集合,java程序员几乎不能干任何的事情,我们每天的工作也是在对集合进行不同的操作. 尽管集合的功能已经足够强大,但是当我们面对复杂的业务问题的时候,利用原始的集合操作就会变得让人恶心. 于是在java8之中出现了lambda和stream
阅读全文
摘要:一 概述 因为手头上服务器很紧张,因此在阿里云上买了一个云服务器.为了能让服务器能跑起来,因此常用的软件还是需要安装一下.因为下午演示东西需要放置一个数据库,因此首先就需要安装一个mysql. 之前没有采用过yum安装,本次就体验一下如何安装mysql. 二 . 安装的流程 [1]首先确定是本机上安
阅读全文
摘要:一 . 概述 lombok,很多人认为是一个java之中的黑科技,实际上它是使用Source级别的注解帮助进行源码的生成. 二 . lombok的安装 我使用sts进行lombok的安装. [1]到官方网站上下载对应的jar文件. [2]直接安装和重启sts就能完成. 三 . lombok的使用 我
阅读全文

浙公网安备 33010602011771号