首页
学习
活动
专区
圈层
工具
发布

Google开源依赖注入框架-Guice指南

文中提到高效实现依赖注入的工具Guice,本文就介绍一下这款Google开源的依赖注入框架Guice及其使用方法。 1....那么何时使用在代码中使用 Guice 进行注入呢?一般来说,如果在你的应用代码中业务对象 (Business Objects) 之间的关系或者依赖需要维护的话,你就可以使用Guice 进行注入。...本文会通过一些例子来初步的认识一下 Guice 框架。 当然,不了解依赖注入基础知识的同学建议先看下这篇科普贴 《浅谈依赖注入的实现》。 2....隐式注入 Guice 还提供隐式注入一些通用组件,例如Injector和java.util.Logger的实例等。...5.1 单例 下面在我们的应用程序中注入一个单例,我们指定了Communicator的Scope,它将会被标志为一个单例实例。

2.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    @Autowired依赖注入为啥不推荐了

    警告内容 我们简单翻译一下自动提示的是啥意思: 不建议直接在字段上进行依赖注入。 Spring 开发团队建议:在Java Bean中永远使用构造方法进行依赖注入。...我们说明上面的问题之前先回顾几个spring相关的问题: 依赖注入的方式 Spring 有三种依赖注入的方式 基于属性的注入 这种注入方式就是在bean的变量上使用注解进行依赖注入。...ExcelListener2.taskGroupService = taskGroupService; } 说明:在 Spring 4.5 及更高的版本中,setXXX 上面的 @Autowired 注解是可以不写的...warning提醒的注入方式就是第一种使用属性注解的方式进行注入。 属性注入优点 代码看起来很简单,通俗易懂。你的类可以专注于业务而不被依赖注入所污染。...company; public UserServiceImpl(){ this.company = person.getCompany(); } 初看起来好像没有什么问题,Person 类会被作为一个依赖被注入到当前类中

    1.7K21

    3分钟带你了解轻量级依赖注入框架Google Guice【享学Java】

    但本文并不聊它,而是介绍一款谷歌开源的轻量级依赖注入框架:Guice。...Guice在Java领域并不流行(相较于Spring),但因为它轻量级,所以可以作为你去学习理解DI的一个抓手,适合你去进行独立的分析和理解依赖注入的思想,毕竟程序员经常说的:思想都是相通的。...---- 正文 正所谓谷歌出品,必属精品,况且Guice还出自于它的广告这种多金部门,自然也不例外。Google Guice被大量应用于谷歌内部,然后2010年开源出来。...这便是一个最简单的使用Guice来实现依赖注入的示例,和Spring的ApplicationContext还蛮像的有木有。...;Guice只记录绑定关系,然后在运行时有需要的时候帮你完成注入 ---- 优缺点 Spring 的优缺点此处不做说明,主要描述Guice它的DI领域的优缺点。

    6.1K21

    为什么Spring不推荐@Autowired用于字段注入?

    它灵活的依赖注入机制为我们开发高可维护性的代码提供了极大的便利。然而,尽管@Autowired注解让依赖注入变得如此简单,Spring官方却明确不推荐在字段上使用它进行注入。那么,为什么会这样?...@Autowired字段注入的现状@Autowired是Spring框架中非常常见的注解,用于自动注入依赖。当我们在类的字段上标注这个注解时,Spring会自动将所需的依赖注入进来。...然而,从Spring 4.0开始,官方就不推荐这种字段注入方式了。那么问题出在哪里?字段注入的风险与缺点 难以进行单元测试 字段注入的一个主要问题是它在单元测试中并不友好。...构造器注入可以有效避免这个问题,因为依赖项在对象创建时就已经注入完毕。 为什么Spring推荐构造器注入?既然字段注入存在这么多问题,Spring官方为什么推荐构造器注入呢?...构造器注入也意味着所有的依赖都是显式传入的,因此不会因为依赖的缺失或注入顺序的问题而导致运行时错误。 避免循环依赖 虽然构造器注入可以避免许多字段注入的问题,但它仍然可能引发循环依赖的问题。

    69510

    07 | SQL注入:明明设置了强密码,为什么还会被别人登录?

    其实,SQL 注入和 XSS 攻击很类似,都是黑客通过篡改代码逻辑发起的攻击。那么,不同的点是什么?SQL 注入到底是什么呢? 通常来说,我们会将应用的用户信息存储在数据库中。...这个过程,就相当于黑客“注入”了一段 SQL 代码到应用中。这就是我们常说的 SQL 注入。 这么说可能还是有点理论,不够具体。...比如,黑客想“删库跑路”的话,就令 userId 为 1;DROP TABLE Users,那么,后台实际执行的 SQL 就会变成下面这行代码,而数据库中所有的用户信息就都会被删除。...▌通过 SQL 注入攻击,黑客能做什么? 通过上面对 SQL 注入的简单介绍,我们已经知道,SQL 注入会令 Web 后台执行非常规的 SQL 语句,从而导致各种各样的问题。...,所以 SQL 注入没有编码的保护方案。

    1K20

    二、Eureka的最核心概念:InstanceInfo实例信息

    另外,还需注意的是Eureka使用的是Guice作为它的依赖注入DI基础组件,因此源码处你进场能看见@Singleton、@Inject等注解的使用,为了不妨碍你的阅读和研究,建议可先认识下Google...Guice这个轻量级依赖注入的相关支持,这里我也很暖心的给你准备好了直达电梯:3分钟带你了解轻量级依赖注入框架Google Guice【享学Java】。...---- 成员属性 // @ProvidedBy是Guice的注解,用于在Guice的DI依赖注入时生成一个InstanceInfo实例 @ProvidedBy(EurekaConfigBasedInstanceInfoProvider.class...InstanceStatus.UP,是个枚举 starting:实例初始化状态,此状态主要给实例预留初始化时间 down:当健康检查失败时,实例的状态转变到down up:正常服务状态 out_of_service:不参与接收服务...但是此时服务实例并未T除去) serviceUpTimestamp:上线时间 ---- 代码示例 创建一个InstanceInfo这里就不手动Builder了,这里我使用Guice依赖注入的方式来得到一个实例

    2K20

    Guice快速入门

    Spring框架的依赖注入是家喻户晓的,但是在实际的开发中我们想使用便捷的依赖注入功能,但是又不想引入Spring框架的笨重和复杂性,该怎么办呢?...Guice的启动速度是很快的,在一个大型应用中,Guice装配所有的模块决不会超过1s。Guice是一个非常干净的依赖注入框架,框架除了依赖注入功能之外,没有任何其它非相关模块功能。...Guice里最常用的两个注解就是@Singleton和@Inject,Singleton表示构建的对象是单例的,Inject表示被标注的字段将使用Guice自动注入。...; sample = injector.getInstance(Sample.class); sample.hello(); } } 我们可以不使用@ImplementedBy注解,因为这样不优雅...SampleModule()); Sample sample = injector.getInstance(Sample.class); sample.hello(); } } 还可以自动注入

    98000

    Maven容器的下半场:Guice,听说仅次于Spring

    Guice是什么 根据wiki的描述,Guice就是依赖注入框架,由google开源。主要特点就是:支持以java注解的方式配置组件及依赖。...而Guice呢,我这边会重点讲解:怎么存。至于取,可能还分成两种,依赖注入和直接从容器中取。但是依赖注入的底层实现,也是:发现我依赖的某个东西没有,就去容器里取。...我们看看Guice的支持怎么样 不绑定的话,可以这样: @ImplementedBy(TestInterfaceImpl.class) interface TestInterface { } 这就相当于...但是官方不建议用这种隐式绑定,不知道为啥,还出了个选项,专门禁用隐式绑定。 9. 一个接口多个实现类,一次性全获取回来 这个场景,就是一次性把多实现类一把取回来,放到一个集合里给你。...注入的方式 前面说了很多怎么手动从容器里面取,当然了,要自动注入的话,也是支持:构造器注入、field注入等等方式。

    1.4K40

    Google Guice 快速入门

    Guice是Google开源的一个依赖注入类库,相比于Spring IoC来说更小更快。Elasticsearch大量使用了Guice,本文简单的介绍下Guice的基本概念和使用方式 基本使用 1....如果希望在构造器中注入依赖的话,只需要添加 @Inject 注解即可 Guice配置完之后,我们需要调用 Guice.createInjector 方法传入配置类来创建一个注入器,然后使用注入器的 getInstance...方法获取目标类,Guice会按照配置帮我们注入所有依赖。...(new MyServletConfig()); } } 注入Servlet相关对象 除了配置Servlet之外,Guice还允许我们把Request、Response和Session对象注入到非...详情请参看Guice文档 JSR-330标准 JSR-330是一项Java EE标准,指定了Java的依赖注入标准。Spring、Guice和Weld等很多框架都支持JSR-330。

    2.1K40

    Guice 快速入门

    Guice是谷歌推出的一个轻量级依赖注入框架,帮助我们解决Java项目中的依赖注入问题。如果使用过Spring的话,会了解到依赖注入是个非常方便的功能。...不过假如只想在项目中使用依赖注入,那么引入Spring未免大材小用了。这时候我们可以考虑使用Guice。本文参考了Guice官方文档,详细信息可以直接查看Guice文档。...Guice配置完之后,我们需要调用Guice.createInjector方法传入配置类来创建一个注入器,然后使用注入器的getInstance方法获取目标类,Guice会按照配置帮我们注入所有依赖。...,Guice会在调用方法之前注入需要的对象。...详情请参看Guice文档。 JSR-330标准 JSR-330是一项Java EE标准,指定了Java的依赖注入标准。Spring、Guice和Weld等很多框架都支持JSR-330。

    1.7K10

    三十四、借助Guice的DI依赖管理,轻松实现一键启动Eureka Client端完成服务注册

    参考文章:3分钟带你了解:轻量级依赖注入框架Google Guice【享学Java】 ---- 正文 前面文章我书写代码示例的时候,全靠我勤劳的双手,各种new对象,各种组件的构建和组装真的是蛮麻烦的。...注入eurekaClient 提供使用 // 说明:若你只想用纯API方式使用,此句是没有必要写的~~~~~ injector.injectMembers(this); //...可以看到注入的和API获取到的是同一个实例 EurekaClient injectorInstance = injector.getInstance(EurekaClient.class);...} } else { ... } ... } 我们已经知道AmazonInfo它对实例id、ip、hostname等配置都是使用metadata元数据来完成配置的,因此要想正常启动容器不抛错...(Modules.override(new EurekaModule()).with(new MyModule())); // 让其可以@Inject注入eurekaClient 提供使用

    1K20

    Dubbo源码篇08---依赖注入和AOP在Dubbo中的实现

    ---- 依赖注入 我们先来简单回顾一下依赖注入部分的源代码: createExtension方法是创建普通扩展类的核心方法: injectExtension依赖注入的核心代码如下所示:...=com.adaptive.Guice 测试类: ApplicationModel applicationModel = ApplicationModel.defaultModel();...instance; } ... } 这里简单说明一下装饰条件指的是什么: 首先,如果某个扩展类型存在某个扩展实现,该扩展实现类中存在一个拷贝构造函数,类型为当前扩展类型,则该扩展实现类会被搜集作为当前扩展实现的...implements FrameWork{ private FrameWork wrapper; public Guice(FrameWork frameWork) {...extensionLoader.getExtension("springBoot"); System.out.println(frameWork.getInfo()); 这个原因是FrameWork的Wrapper装饰类会被单独搜集起来

    75210

    为什么spring不推荐@Autowired注入,提示:Field injection is not recommended

    spring中的三种依赖注入方式 变量(filed)注入@Autowired UserDao userDao; 构造器注入final UserDao userDao; @Autowired public...相信很多人都遇见过一个bug,依赖注入的对象为null,在启动依赖容器时遇到这个问题都是配置的依赖注入少了一个注解什么的。...依赖注入的核心思想之一就是被容器管理的类不应该依赖被容器管理的依赖,换成白话来说就是如果这个类使用了依赖注入的类,那么这个类摆脱了这几个依赖必须也能正常运行。然而使用变量注入的方式是不能保证这点的。...而如果是采用构造器注入或者set注入,就可以避免上诉问题。 使用set方式时,这是一种选择注入,可有可无,即使没有注入这个依赖,那么也不会影响整个类的运行。 使用构造器方式时已经显式注明必须强制注入。...通过强制指明依赖注入来保证这个类的运行。总结变量方式注入应该尽量避免,使用set方式注入或者构造器注入,这两种方式的选择就要看这个类是强制依赖的话就用构造器方式,选择依赖的话就用set方法注入。

    4.9K20

    Google 开源的依赖注入库,比 Spring 更小更快!

    Guice是Google开源的一个依赖注入类库,相比于Spring IoC来说更小更快。Elasticsearch大量使用了Guice,本文简单的介绍下Guice的基本概念和使用方式。...学习目标 概述:了解Guice是什么,有什么特点; 快速开始:通过实例了解Guice; 核心概念:了解Guice涉及的核心概念,如绑定(Binding)、范围(Scope)和注入(Injection);...最佳实践:官方推荐的最佳实践; Guice概述 Guice是Google开源的依赖注入类库,通过Guice减少了对工厂方法和new的使用,使得代码更易交付、测试和重用; Guice可以帮助我们更好地设计...辅助注入(Assisted Inject)属于Guice扩展的一部分,它通过@Assisted注解自动生成工厂来加强非注入参数的使用。...; 只注入直接依赖:不用注入一个实例来获取真正需要的实例,增加复杂性且不易测试; 避免循环依赖 避免静态状态:静态状态和可测试性就是天敌; 采用@Nullable:Guice默认情况下禁止注入null对象

    1.2K20
    领券