1.Java泛型ApacheCommonsPool2源码使用了大量的泛型知识。这里我们回顾一下泛型,以便于我们更好的阅读后续的源码。1.什么是泛型?简而言之,泛型可以在定义类、接口和方法时使类型(类和接口)成为参数。类似于方法声明中使用的形式参数。2.Java通用标记E-Element(用在集合中,因为集合存储元素)T-Type(Java类)K-Key(键)V-Value(值)N-Number(数字类型)?-不确定的Java类型S、U、V-第二、第三、第四类型3。这些标签代表的Object和Java类型有什么区别?对象是所有类的根类,可以设置任何类的对象在使用对象引用变量时,可能需要进行类型强制,但使用泛型T、E等标识符后,实际使用前类型已经确定,并且不需要类型强制。4.官方参考可以肯定地说,上面介绍的知识在论坛和博客上都可以搜索到,但是你有没有想过那些博主是从哪里得到这些通用知识的呢?书籍是一个渠道,更重要的是官方文档参考。如果英文好的话,强烈建议大家看一下官网的原版说明。从这些官方的技术文档中,你可以得到很多意想不到的知识。http://docs.oracle.com/javase/tutorial/java/generics/index.html这个地址是Oracle官网对Java泛型的说明。建议大家有空的时候看看。2.第一次认识Pool2。在回顾了Java泛型之后,让我们来了解ApacheCommonsPool2。既然要先了解对方,那么就跟认识一个人一样,接触多了自然会加深印象。我们如何与代码取得联系?当然是demo,一个小demo可以帮助我们理解,加深印象。下面来拆解Pool2的demo。1.准备demo环境2.从池中取出StringBuffer,使用后放回池中PS:一般第14行代码需要初始化一个buf=newStringBuffer(),这里赋值为null,第16行不初始化,直接从池中获取StringBuffer,使用后放回第29行的池中。在这里,StringBuffer被用作池中的资源。当然,现实中可以直接使用StringBuffer初始化,不需要使用。池,大家可以想象一下,如果把StringBuffer换成jdbc连接,不就是jdbc连接池吗?3、定义StringBufferFactory,根据需要覆盖池中对象的生命周期方法PS:PooledObjectFactory接口定义了池方法中对象的生命周期。实现PoolableObjectFactory的最简单方法是扩展BasePooledObjectFactory。StringBufferFactory是一个BasePooledObjectFactory实现,用于创建上面使用的StringBuffer对象。4.结合测试PS:我们将StringBufferFactory传给GenericObjectPool工厂来实例化我们的ReaderUtil。从这个简单的demo中我们可以看出Pool2作为一个资源池来管理StringBuffer等对象资源。【本文为专栏作者“朱国立”原创稿件,转载请通过作者微信公众号“开发者圆桌”联系授权】点此查看本作者更多好文
