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

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

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

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

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

DAL 数据访问层

BLL 业务处理层

main 就当控制层

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

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

运行结果:

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

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

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

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

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

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

我们来测试一下

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

我们再加多一个 adminDAL 看看

运行正常。

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

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

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

java语言精粹_java 成神之路 (一)相关推荐

  1. Java成神之路[转]

    阿里大牛珍藏架构资料,点击链接免费获取 针对本文,博主最近在写<成神之路系列文章> ,分章分节介绍所有知识点.欢迎关注. 主要版本 更新时间 备注 v1.0 2015-08-01 首次发布 ...

  2. JVM成神之路-Java内存模型(JMM)

    Java 内存模型基础 什么是 Java 内存模型(JMM-共享内存模型) 内存模型描述了程序中各个变量(实例域.静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量 ...

  3. Java 工程师成神之路 | 2019正式版 1

    Java 工程师成神之路 | 2019正式版 基础篇 01 面向对象→ 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 → 平台无关性 Java 如何实现的平台无关 JVM ...

  4. Java工程师成神之路 | 2022正式版

    基础篇 面向对象 什么是面向对象 面向对象与面向过程 面向对象的三大基本特征 面向对象的五大基本原则 封装.继承.多态 什么是多态 方法重写与重载 Java的继承与实现 Java的继承与组合 构造函数 ...

  5. Java小白怎么学?2021年最强版Java工程师成神之路

    以下文章来源于爱笑的架构师 最近很多读者在问:Java 怎么学习啊 ?有没有什么学习路线 ?Java " 成神 " 之路怎么走? 当然「成神」是有些夸张了,我相信问这句话的读者或多 ...

  6. Alibaba技术专家倾心五年打造 Java成神之路:基础篇

    近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是Java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. ...

  7. 阿里P8资深架构师耗时一年整理Java工程师成神之路

    1.基础篇 01:面向对象 → 什么是面向对象 面向对象.面向过程 面向对象的三大基本特征和五大基本原则 → 平台无关性 Java 如何实现的平台无关 JVM 还支持哪些语言(Kotlin.Groov ...

  8. 《Java工程师成神之路》终于免费开放下载了!

    很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么. 好在,很 ...

  9. Java成神之路技术整理

    转载自 Java成神之路技术整理 以下是Java技术栈微信公众号发布的所有关于 Java 的技术干货,会从以下几个方面汇总,本文会长期更新. Java 基础篇 Java 集合篇 Java 多线程篇 J ...

最新文章

  1. 对Python课的看法
  2. C++ Primer 5th笔记(chap 14 重载运算和类型转换)递增和递减运算符
  3. 计算机房装修对门的要求,防火门尺寸要求有哪些 防火门尺寸规范
  4. python输入一个列表的语句_python自学笔记使用if语句处理列表作业
  5. springboot html压缩,springboot 请求响应压缩
  6. JQuery使用笔记
  7. 机器学习week8 ex7 review
  8. macosx下apache的默认用户为daemon
  9. 后妈茶话会_歌词(Tough Love)
  10. 新书出版 |《数据库程序员面试笔试真题库》
  11. android+微博点赞动画,模仿微博点赞动画
  12. VS2019 团队资源管理器--Git的使用(二)
  13. 四川省专业技术职称计算机,转发四川省职称改革工作领导小组关于统一专业技术人员全国职称计算机应用能力考试标准有关问题的通知(川职改[[2006]3号)...
  14. np.arange函数
  15. 呼叫中心系统的基本构成和二次开发思路
  16. 框架的概念框架(Framework)
  17. Python包装网页微信API并实现简单自动回复
  18. Flutter开发模式之Bloc学习
  19. MFC封装功能成动态库相关问题汇总记录
  20. 全年销售完成目标,远洋集团的根本问题却仍未解决

热门文章

  1. 【linux-command not find解决方法 】
  2. Long类型参数传到前端精度丢失的解决方案
  3. IDEA异常解决: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  4. 为什么要使用Ruby的attr_accessor,attr_reader和attr_writer?
  5. Java中“最终类”的意义是什么?
  6. python defaultdict(list)_Python collections.defaultdict() 与 dict的使用和区别
  7. ffice 2016 文件运行excel的数据透视表中的数据切片器的时候自动关闭
  8. 多伦多大学计算机专音乐专业,多伦多大学音乐专业有哪些申请要求?
  9. db2v9/9.5高级应用开发_使用 Vue.js 2.0 开发单页应用
  10. mqtt server python_Python使用mqtt极简例子