注入(injector)

在java开发中有时候我们的一个类需要依赖另外一个类,这种就是依赖关系,创建对象的工作一般由spring容器来完成然后注入给调用者,这种就是依赖注入

Java依赖注入设计原则允许我们移除硬编码依赖和让我们的应用低耦合,可扩展和可维护。我们可以通过在Java中实现依赖注入将依赖关系从编译时移到运行时来解析。 Java依赖注入似乎很难通过理论来掌握。所以我将通过一些简单的例子,然后我们将会看到如何在应用里使用依赖注入模式来实现低耦合和可扩展性。
       一个最好的setter依赖注入的例子是 Struts2 Servlet API Aware interfaces 到底是使用基于构造器依赖注入还是基于setter方法依赖注入取决于你的需求。举个例子,如果没有服务类我的应用完全不能运行,那么我会偏向基于构造器的DI,否则我会选择基于setter方法的DI,只有在真正需要才会使用它。 Java中的依赖注入是一种通过使对象从编译时绑定移到运行时绑定来实现控制反转(Inversion of control IoC)的一种方式。我们可以通过工厂模式(Factory Pattern), 模板方法设计模式(Template Method Design Pattern), 策略模式(Strategy Pattern)还有服务定位模式(Service Locator pattern)来实现IoC。 Spring依赖注入,Google Guice还有Java EE CDI框架通过使用Java Reflection API和Java注解来促进依赖注入的过程。我们只需要注解该域,构造器或者setter方法然后在配置xml文件或者配置类中配置它们。

Java依赖注入的好处 一些使用Java依赖注入的好处如下:关注点分离 应用程序类中的样板代码减少,因为所有用于初始化依赖性的工作都由注入器组件处理 配置组件使应用程序易扩展 通过模拟对象来单元测试会很简单 Java依赖注入的缺点

Java依赖注入也有一些缺点: 如果过度使用,可能会导致维护问题,因为更改的影响只有在运行时才知道。 Java中的依赖注入可能会隐藏导致运行时错误的服务类的依赖性,这会在编译时被捕获。 以上就是Java中的依赖注入模式。当我们控制服务时,了解和使用它是很好的。

(ps:常用注入)

posted @ 2019-03-12 14:53 .知寒 阅读(...) 评论(...) 编辑 收藏

注入(injector)相关推荐

  1. AngularJS 浅谈DI-依赖注入 $injector的神奇之处

    前言 依赖注入(DI)和控制反转(IOC)都是java Spring里经典的面向对象编程的法则来削减计算机程序的耦合问题的解决方案. 在Angular中,引入了DI的思想,DI是一种工具思想,而不是一 ...

  2. 理解AngularJS中的依赖注入

    作者 CraftsCoder 冷月无声 - 博客频道 - CSDN.NET http://blog.csdn.net/jaytalent/article/details/50986402 本文结合一些 ...

  3. Angular动态创建组件之Portals

    本文主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的内容.如:Angular多级依赖注入.ViewContainerRef,Portal ...

  4. Guice之Servlet基础

    如果读者对于Guice没有大体的了解,可以参考本人的另一篇Guice基础文章 Guice 提供了一个完整的体系使得我们在web应用中也可以使用它作为依赖注入的工具. 为什么使用 Guice : 使用G ...

  5. angular获取图片高宽_Angular 读书笔记

    前言 今天是二月份的最后一天,是该好好总结下.2月12号正式开始工作,第一周有些不在状态,所以18号-28号真正投入工作和学习,最近工作节奏不是特别快(两周的polish week 修复bug),但是 ...

  6. 再叙AngularJS

    上一篇讲到AngularJS是在三月17号,已经过去整整3个月. 当时我也只是AngularJS的入门程序员,文章涉及的内容也只是针对框架的特性和Backbone进行简单的对比. 在当时,我正在进行内 ...

  7. 托福百日冲刺—词汇(1)

    2021.2.21 星期日 1.写作对于单词的要求: Diction Syntax Rhetorical device 2.语言层次: short ,correct,but colorless Man ...

  8. 学会使用AngularJS

    这是用前端框架AngularJS构建一个简单应用的部分代码,首页配制一个路由.当然,AngularJS路由功能是一个纯前端的解决方案,与我们熟悉的后台路由不太一样.前端路由需要提前对指定 的(ng-a ...

  9. Container(容器)与 Injector(注入)

    Container(容器): History: containerd于2014年出生于Docker,最初是Docker引擎的低层运行时管理器.继2017年3月被CNCF接受之后,containerd已 ...

  10. Angular报注入错误,以及解决方式,$injector:unpr

    1.页面错误如:$injector:unpr angular.min.js:80 Error: [$injector:unpr] http://errors.angularjs.org/1.2.9/$ ...

最新文章

  1. WebSocket客户端连接不上和掉线的问题以及解决方案
  2. 男人心疼女人的十种方式
  3. Linux设置环境变量小结
  4. Java wait notify
  5. 关于perl和shell的参数传递
  6. 60分钟快速入门PyTorch
  7. CodeIgniter笔记3
  8. MyBatis学习总结(三)---映射文件及引入方式
  9. 工业互联网平台基本架构
  10. Arduino实验二十五 超声波传感器测距实验
  11. 登高,A股想过重阳节,但是令人遗憾的是,遍插茱萸少一人啊
  12. excel如何把顺序倒过来_excel怎么把顺序倒过来
  13. 无插件使用Eclipse和Resin调试WEB应用(Debug Web App In Ecli...
  14. sketch插件导出html,Sketch插件根据命名导出HTML片段Sketch Emmet
  15. 超声波阵列功率驱动:利用MX1919驱动
  16. 如何将数据从一台主机发送到另一台主机上(详解)
  17. 聊天机器人技术分析综述
  18. From RankNet to LambdaRank to LambdaMART: An Overview
  19. 欧拉角与旋转矩阵转换 matlab 函数 angle2dcm dcm2angle 方向余弦矩阵 机器人坐标变换
  20. 虚拟运营商牌照即将发放

热门文章

  1. CMIP6数据处理方法与典型案例分析
  2. git服务器远程定时备份
  3. matlab建模三要素,MATLAB建模与求解详解.ppt
  4. python常见错误-缩进错误(IndentationError)
  5. 一:《方田》--32
  6. Data Mesh的原则和逻辑架构
  7. 互联网的可怕未来:创新技术构成更大的网络安全威胁
  8. 关于态势感知,客户到底需要些什么?
  9. MySQL的初始化,密码,授权
  10. windows动态添加lib的三种方法