java语言精粹_java 成神之路 (一)

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

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

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

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

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

d0faafeb1c94d7e9e458107a24e0579e.png

DAL 数据访问层

BLL 业务处理层

main 就当控制层

然后我们 实例化一个对象的时候 通常是这样

219c2e6161aba339ff11d62988366f6c.png

通过 new 关键词 来实例化对象。

运行结果:

ed0f11948c17f567f6f2fb53fc9ed29b.png

现在我们需要把 BLL 改造成这样 也能使我们的程序整运行:

92752ebcd491a9adb5c5b384bb3f28b8.png

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

c23d819dab6669855ce42d9baa996280.png

因为我们要通过反射实例化一个对象, 所以在这个注解上面加入了一个Class 变量。 后面通过传入的 Class 得到 实例化对象。

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

53adbc49027c6984335de440e341efa7.png

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

6cb6e706d1cef5208850a6ee7347538c.png

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

我们来测试一下

0efe2fcba8f62ed785243c5fb9245ba9.png

结果和前面通过 new 是一样的

我们再加多一个 adminDAL 看看

3a55f1df3bfa22ddb5335d40b55d26b3.png

24c6016efd556635da46901414aaf51f.png

运行正常。

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

接下来我们可以 实现 一个类似 spring 的bean 容器。 只要初始化过一个的对象 都放到这个容器里面,下一次从这个 容器里面获取这个对象。

这样就可以进一步 节约开销,提升性能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值