读了周勇老师的《从零开始写javaweb框架》,感觉干货还是挺多的。想把自己的收获分享给大家。不过,这本书中的从零开始并不是指的零基础,而是从无到有。所以,还是建议有一定web基础的朋友们阅读,最好是对Spring的IOC、AOP有一定了解。
总体印象
这本书一共有五章。首先要告诉大家,我没有读完,只是精读了前两章、粗读了三四章,第五章大致浏览了一下,以后如果还有什么新的感悟,还会再分享。还是先说说目前的感受吧。
看的出来,作者水平很高,这本书也差不多将web框架常用知识和框架脉络梳理了一遍。但是说它需要有一定基础的朋友们阅读主要有两个原因:
- 书中错误比较多,需要读者有一定的纠错能力。我在读第一章第二章的时候遇到了不少错误,主要都是一些细节性的错误。读者应该在遇到书中错误的时候,能够明白作者的意图并正确处理书中的细节问题。
- 书中对基础知识介绍较少,大部分都是直接贴代码,而且注释很少,读者应该能够看得懂这些代码。我就是在这里遇到了困难,在读一些比较困难的代码时失去了耐性,比如如何动态的将带有IOC注解的类注入到IOC容器。以至于后面的代码都没有细读。
大家如果还是不知道自己是否适合这本书,可以看一下豆瓣的书评。
收获
即使如此,读了这本书我也收获颇丰,也学习到了作者的一些编程的小技巧,把他分享给大家,希望对大家有所帮助:
- 说到读取配置文件,大家会想到什么方法呢?
我首先想到的就是FileInputStream类,但是大家都知道这个类的使用是非常麻烦的。像我这样基础不牢的coder要在网上找个例子估计才能写。但书中给我们提供了一种非常简单的方法,令人耳目一新。
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
备注:此方法要求配置文件必须在项目的classpath下。
- 在封装通用jdbc的方法的时候我总是因为ResultSet和Entity类的转换问题而纠结。这里书中为我们介绍了ResultSetHandler这个类,这个类在用于将ResultSet转换为实体对象时十分有用,下面给大家一个例子,大家有兴趣的话可以了解一下,这是在apache的DBUtils的jar包下:
/**
* 查询实体类
*
*/
public static <T> T queryEntry(Class<T> entityClass, String sql, Object... params) {
T entity = null;
try {
entity = queryRunner.query(getConnection(), sql, new BeanHandler<T>(entityClass), params);
} catch (SQLException e) {
logger.error("query entry failure!", e);
new RuntimeException(e);
} finally {
closeConnection();
}
return entity;
}
这里因为是我的弱点,我就详细介绍一下ResultSetHandler这个类,这个类有很多子类,于将查询到的ResultSet转换为不同种类的对象:
- BeanHandler —— 返回Bean对象;
- BeanListHandler —— 返回List对象;
- BeanMapHandler —— 返回Map对象;
- ArrayHandler —— 返回Object[]对象;
- ArrayListHandler —— 返回List对象;
- MapHandler —— 返回Map对象;
- MapListHandler —— 返回List<Map>对象;
- ScalarHandler —— 返回某列的值;
- ColumnListHandler —— 返回某列的值列表;
- KeyedHandler —— 返回Map对象,需要指定列名;
它们的继承关系如图所示:
- 在获取Connection时为了保证线程安全,应该使用ThreadLocal将Connection包裹起来,这都是我在平时写代码时没有注意到的。
/**
* 使用ThreadLocal保证Connection线程安全
*/
private static final ThreadLocal<Connection> connectionHolder = new ThreadLocal<>();
- 单单使用ThreadLocal还并不完美,为了防止频繁的开启和关闭Connection我们还需要有一个数据库连接池,虽然我以前也用连接池,但是只是教程教的让用我就用,并没有理解其中的原理。常用的数据库连接池有DBCP 、C3P0。
内容介绍
第三章之后我看的就不太仔细了,原因前面也说了,代码写的有点难懂,注释也少,很多都是在编写工具类。我是看着有点晕。也可能是我太菜了。让大家笑话了。这里就给大家大概介绍一下主要内容吧。
第三章讲的是IOC容器相关的知识,主要讲IOC容器如何加载Bean对象。
第四章讲的比较详细。第一部分从静态代理讲到动态代理,再讲到什么是JDK代理、CGlib代理、Spring的AOP机制最后讲到Spring + Aspect。
第二部分讲了ThreadLocal和事务。
第五章讲了 Action的优化、文件上传和下载、集成Shiro安全框架和CXF框架。
后面的我都是大概浏览了一下大概内容,并没有仔细的研究。大家也可以根据自己的需要学习其中的某一部分。
如果大家看了这本书有什么新的感悟,也欢迎分享给我。
这是黄勇老师的关于smart-framework的博客,大家如果对这个框架有兴趣的可以关注一下:https://my.oschina.net/huangy...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。