标签归档:Java

Java 8 新特征

本文主要包括以下内容:
Lambda 表达式
方法引用
接口的默认方法和静态方法
Stream API

Lambda 表达式(Lambda Expression)
Java8最大的变化莫过于引入函数式编程的概念,也就是Lambda表达式,它因数学中的λ演算得名。1958年LISP语言第一个支持了Lambda,发展至今,越来越多的编程语言也逐渐开始支持这一特征,比如C#,C++,PHP等。而Oracle终于在2014年正式在Java8中支持Lambda表达式,这个广大Java程序员期待已久的特性终于来临。
什么是Lambda 表达式?
看起来很高大上的名字,其实说白了就是一个匿名函数,它没有函数名,没有访问修饰符,只是用一个表达式来代表一个函数。在Java8中你可以把一个函数(Lambda表达式)作为一个方法的参数传递进去(很奇怪?下面会说)。
语法:

圆括号里代表的是参数,花括号里是函数体(返回),->在数学上的解释是由A推导可以得到B。Lambda表达式的语法很简单,具体细则就不说了,参考以个几个例子就可以很好[……]

继续阅读

Spring的DataSource是如何工作的

如果你使用过Spring管理过数据库连接,那么一般会在applicationContext.xml文件里看到如下的代码:

这段配置就是用来指定datasource的,其实跟普通的bean注入没什么区别啊,那在这背后Spring到底干了些什么呢?这个bean是如何管理数据库连接的呢?想要理解这背后的一切自然就要看看这个类:org.springframework.jdbc.datasource.DriverManagerDataSource到底干了些什么。

看到这里应该很清楚了,DriverManagerDataSource这个类只不过非常简单地封装了一下JDK的DriverManager,本质上还是使用DriverManager来获取数据库连接。值得注意的是,DriverManagerDataSource最顶层继承了JDK的DataSource,也就是说只要有一个DataSource的实例,然后调用getConnection()即[……]

继续阅读

Netty简明教程

在阅读了netty-4.0.0-final的源码以及参考了《Netty in Action v5 MEAP》这本书之后,决定写一篇文章记录这几天的心得体会,介绍下netty的相关知识。但并不会面面俱到地阐述每一个细节,只会记录一些个人认为非常重要的部分,比如其线程模型,关键组件,以及使用方法等。

一.Netty是什么?

Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。

以上这个定义来自百度百科,简单来说Netty就是一个服务器端的网络通信框架,用于处理网络请求,和你自己写一个简单的服务器没什么本质上的区别,只不过Netty做的更强大。因为它是一个基于网络IO的通信框架,不受限于网络协议,所以他的应用范围就很广。比[……]

继续阅读

Netty ChannelHandler使用报错

最近在研究和学习Netty,按照书上的教程写了一个很简单的demo,但是运行却报错了,代码如下:

启动好了之后,浏览器输入:http://127.0.0.1:7777?x=1&y=2 ,但是令人奇怪的是这个服务器只能接受一次请求,后面的请求均会产生如下的报错:

按照报错的提示,原因就是这个channelHandler没有使用@Shareable注解,加上之后果然问题解决了。但是到这里我的疑问并没有得到解决,为什么这个handler必须要加上@Shareable注解?这一步步到底是怎么回事?经过几次断点,再结合阅读源码,总算是搞清楚为什么了。
首先来看抛出异常的方法DefaultChannelPipeline->checkMultiplicity,代码如下:

这段代码很简单,如果这个handler被加过了,也就是h.adder=true,并且不是[……]

继续阅读

Eclipse离线安装反编译插件(Eclipse Class Decompiler)

之前只用了IntelliJ IDEA一段很短的时间,但对他自带的反编译功能却念念不忘,简直是阅读源码大杀器,太方便了。在又切回eclipse之后就不习惯了,于是强烈地想找到一款eclipse反编译插件。搜了搜,好像比较流行的就这一款插件,作者还是个中国人,点个赞。作者的博客明确指出从某个版本开始就不支持离线下载了,但我经常用的eclipse却在公司内网,那怎么办呢?之前在学校的时候装eclipse的插件好像就是plugins和feature文件夹下面放几个jar包就行了,但如今eclipse的版本已经更新太多了,还能不能行呢?试一下就知道了。
首先在外网的Eclipse Marketplace安装一下这个插件:https://marketplace.eclipse.org/content/eclipse-class-decompiler ,安装好了之后在plugins和feature分别找到以”org.sf.feeling.decompiler”开头的文件或者文件夹,然后把这些拷贝到内网相同的目录下面,重启eclipse就大功告成。
文件结构大概是这样的:
plugins文件夹:[……]

继续阅读