java 成神之路 (一)

经过注解和反射实例化一个对象(依赖注入)

适合对java反射有一点了解的人java

咱们都知道 spring 在 变量前面加上 @autowired @component 等注解就能够实例化该变量。它是怎么作到的呢? 反射加Bean工厂,spring扫描这些注解后经过注解从bean工厂里面取出已实例化的对象,而后经过反射赋值到该变量上面,达到了实例化含有改注解 的变量。git

今天咱们来演示一下经过 反射加注解怎么实例化一个变量。github

咱们来模拟 简单一个 三层架构 MVC 工程。spring

这里写图片描述

DAL 数据访问层架构

BLL 业务处理层性能

main 就当控制层测试

而后咱们 实例化一个对象的时候 一般是这样spa

这里写图片描述

经过 new 关键词 来实例化对象。设计

运行结果:component

这里写图片描述

如今咱们须要把 BLL 改形成这样 也能使咱们的程序整运行:
这里写图片描述

首先看看 咱们 @DAL 是怎么定义的:

这里写图片描述

由于咱们要经过反射实例化一个对象, 因此在这个注解上面加入了一个Class 变量。 后面经过传入的 Class 获得 实例化对象。

下一步是 扫描注解获得 注解有 @DAL 注解的变量

这里写图片描述

下一步 经过反射 含有 DAL 实例化对象

这里写图片描述

到此 完成 了 反射实例化对象并赋值到了 含有该变量的注解上面

咱们来测试一下

这里写图片描述

结果和前面经过 new 是同样的

咱们再加多一个 adminDAL 看看

这里写图片描述

这里写图片描述

运行正常。

这只是个简单的列子,重要的是设计思想。

接下来咱们能够 实现 一个相似 spring 的bean 容器。 只要初始化过一个的对象 都放到这个容器里面,下一次从这个 容器里面获取这个对象。
这样就能够进一步 节约开销,提高性能。

代码地址 https://github.com/linving/java_club.git

相关文章
相关标签/搜索