在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:常用注入

注入(injector)的更多相关文章

  1. AngularJS源码分析之依赖注入$injector

    开篇 随着javaEE的spring框架的兴起,依赖注入(IoC)的概念彻底深入人心,它彻底改变了我们的编码模式和思维.在IoC之前,我们在程序中需要创建一个对象很简单也很直接,就是在代码中new O ...

  2. injector

    angular 提供了一套依赖注入的机制,和后台很像.虽然我不觉得有很重要. var $injector = angular.injector(["myModule"]); var ...

  3. ng 依赖注入

    将依赖的对象注入到当前对象,直接去使用依赖的对象即可. 降低耦合度.提高开发速度.. 文件压缩:yui-compressor有两种方案:①CLI(command line interface)java ...

  4. 理论+案例,带你掌握Angular依赖注入模式的应用

    摘要:介绍了Angular中依赖注入是如何查找依赖,如何配置提供商,如何用限定和过滤作用的装饰器拿到想要的实例,进一步通过N个案例分析如何结合依赖注入的知识点来解决开发编程中会遇到的问题. 本文分享自 ...

  5. 7_nodejs angularjs

    webstrom使用: ctrl+b/点击,代码导航,自动跳转到定义 ctrl+n跳转指定类 ctrl+d复制当前行ctrl+enter另起一行ctrl+y删除当前行 ctrl+alt/shift+b ...

  6. 动态创建angular组件实现popup弹窗

    承接上文,本文将从一个基本的angular启动项目开始搭建一个具有基本功能.较通用.低耦合.可扩展的popup弹窗(脸红),主要分为以下几步: 基本项目结构搭建 弹窗服务 弹窗的引用对象 准备作为模板 ...

  7. 从源码看 angular/material2 中 dialog模块 的实现

    本文将探讨material2中popup弹窗即其Dialog模块的实现. 使用方法 引入弹窗模块 自己准备作为模板的弹窗内容组件 在需要使用的组件内注入 MatDialog 服务 调用 open 方法 ...

  8. Guice之IOC教程

    Guice 在上一篇博客中, 我们讲解了Spring中的IOC示例与实现, 本文着重介绍Guice注入以及与Spring中的差异. Guice是Google开发的, 一个轻量级的依赖注入框架, 跟Sp ...

  9. Angular动态创建组件之Portals

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

  10. [转载]AngularJS学习笔记

    http://www.zouyesheng.com/angular.html 关于AngularJS 关于本文档 开始的例子 依赖注入 作用域 数据绑定与模板 6.1. 数据->模板 6.2. ...

随机推荐

  1. UML作业第三次:分析《书店图书销售管理系统,绘制类图

    plantuml类图绘制方法的学习: 1.关于类图的学习: 类图显示了系统的静态结构. 类:类图中的主要元素,用矩形表示.矩形的上层表示类名.中层表示属性.下层表示方法. 类之间的关系:关联.依赖.聚 ...

  2. 用python脚本获取运行环境中的module 列表

    由于脚本运行在远程环境,总报错说一些module没有.所以决定彻底对环境进行一次摸底. 于是,用如下代码即可实现: #!/usr/bin/env python import sys try: #pri ...

  3. Python操作MongoDB看这一篇就够了

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...

  4. Pocket Gem OA: Log Parser

    time a given player spends actually connected to the network. We keep console logs of various game s ...

  5. VMware卸载有残留,再安装时报错提示MSI Failed

    引用自吾爱破解论坛:https://www.52pojie.cn/thread-455779-1-1.html 解决方法:软件自动清理法: 软件 地址:下载地址1:链接:http://pan.baid ...

  6. 指定时间生成cron表达式

    public class CronUtils { private static final SimpleDateFormat sdf = new SimpleDateFormat("ss m ...

  7. [macOS] finder变慢提速

    原文地址:http://ntfs-formac.com/fix-slow-finder-macos-sierra/ 我采取的是第二种方法,够简单,直接在终端执行 rm ~/Library/Caches ...

  8. Linux交换Esc和Caps

    使用过 .xmodmap,重启后就失效,添加到rc.local也不管用,后来通过在xorg里配置成功. 更改xorg里的键盘配置,增加Option "XkbOptions" &qu ...

  9. Tengine 安装和说明

    使用tengine要安装nginx.架构为:LTNMT或LTNMP 1. 官网下载源码包 [root@qc_centos7_5 src]# wget http://tengine.taobao.org ...

  10. 20175208 实验二 《Java面向对象程序设计》实验报告

    一.实验报告封面 课程:Java程序设计  班级:1752班  姓名:张家华  学号:20175208 指导教师:娄嘉鹏  实验日期:2019年4月09日~2019年4月18日 实验序号:实验二 实验 ...