前一篇博客介绍了如何 经过注解反射来实例化一个对象。
前面提出的一个优化建议。
上一版本,每一个含有 @DAL 注解的变量都会 经过反射去获得实例化对象。
要是同一个工程里面 每次都对同一个类经过反射实例化一个 对象出来,这样太浪费资源了。
如今咱们就模拟spring的 bean 工厂,把咱们已经实例化的对象缓存起来,下次要用到直接拿出来用不用在经过反射实例化出来了。java
在作这个工做以前 咱们要考虑考虑 用什么 数据结构来 缓存咱们的对象。
显然能够用Map 来缓存咱们的对象。key 类名 ,value 对象 。git
ObjectCreator
用于缓存和初始化对象。
一个 static Map 类变量 保证全局只有一个缓存存放类。github
封装一个 ReflectionHelper 帮助咱们 赋值对象。spring
而后 咱们的 BaseBLL 能够写成这样了缓存
比前一版本简洁了很多!数据结构
咱们测试一下是否是 ,同一个 AdminDAL 初始化处理的对象是否是同一个测试
改一下优化
UserBLL.net
AdminBLL对象
测试结果 :
咱们发现 从 UserBLL 和 AdminBLL 经过注解实例化的对象都是同一个。
咱们的目的达到了,在不一样的BLL 里面 对同一个DAL实例化是同一个对象。
接下来咱们 还要优化什么呢?
思考思考。
欢迎关注个人新浪微博 :
@drawable
代码地址: https://github.com/linving/java_club.git branch – 第二版