dagger2的Qualifier与Scope】的更多相关文章

Qualifier即Named 当module的@Provides提供相同变量的不同属性时:用于区分把哪一个初始化 Module 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class { @Blue @Provides public Cloth getBluecloth(){ Cloth mCloth=new Cloth(); mCloth.setColor("蓝"); return mCloth; } @Named("…
以下内容摘自部分网友的,并加上了自己的理解 @Service用于标注业务层组件(我们通常定义的service层就用这个) @Controller用于标注控制层组件(如struts中的action.Spring MVC中的Controller) @Repository用于标注数据访问组件,即DAO组件 @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注. 这几个注解是当你需要定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),…
Dagger2是一个IOC框架,一般用于Android平台,第一次接触的朋友,一定会被搞得晕头转向.它延续了Java平台Spring框架代码碎片化,注解满天飞的传统.尝试将各处代码片段串联起来,理清思绪,真不是件容易的事.更不用说还有各版本细微的差别. 与Spring不同的是,Spring是通过反射创建对象的,而Dagger2是[通过apt插件]在编译期间生成代码,这些生成的代码负责依赖对象创建. 本文旨在以简单通俗易懂的方式说明如何使用Dagger2,对其背后设计不做深入探讨.人生苦短,码农更…
Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@Required, @Autowired, @PostConstruct, @PreDestory,还有Spring3.0开始支持的JSR-330标准javax.inject.*中的注解(@Inject, @Named, @Qualifier, @Provider, @Scope, @Singlet…
Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@Required, @Autowired, @PostConstruct, @PreDestory,还有Spring3.0开始支持的JSR-330标准javax.inject.*中的注解(@Inject, @Named, @Qualifier, @Provider, @Scope, @Singlet…
JSR330 DI JSR 330 ,提供了一种可重用的.可维护.可测试的方式来获取Java对象.也称为Dependency Injection . DI应该都不陌生,因为它就是Spring core之一.在Spring盛行后,Google也提供了一种DI实现:Guice.因为这两个DI容器的盛行,JSR在2009年时诞生了.随后Spring.Guice也相继支持了该规范. DI容器,也称为Injector.可以有多种实现方式,可以基于XML.注解.DSL(Domain-specific lan…
提供了基于注解(Annotation-based)的配置,我们可以通过注解的方式来完成注入依赖. 1. 使用注解方式配置 我们需要修改spring配置文件的头信息,修改部分红色标注,如下: <context:annotation-config/> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/…
代码源码地址:https://github.com/wujiachengSH/springBeanDemo 概述:本章将讲解Spring对于Bean的管理方案. 目录: 准备工作 自动装配 处理装配歧义性 bean的作用域 注入式声明Bean 代码环境: Sts jdk1.8 spring4 1.准备工作 请在github上下载源码结合文章阅读,效果更佳 在创建了SpringBoot项目后,我们首先需要开启组件扫描,如下代码所示. @Configuration //扫描指定包目录 @Compon…
@Component 元注解 这是一个元注解,意思是它可以用于标注其他注解,被它标注的注解和它起到相同或者类似的作用.Spring用它定义了其他具有特定意义的注解如@Controller @Service @Repository.如下是Spring中 @Service的定义: @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component // Spring will see this…
关于Dagger2使用的基础如果你还不了解,可以参考我的上一篇文章解锁Dagger2使用姿势(一),这有助于你理解本篇文章. OK,我们在上篇文章介绍另外Dagger2使用过程中四个基本的注解,分别是@Module.@Provides.@Inject以及@Component.今天我想来说说Dagger2中另外一个注解,那就是@Scope注解.看网上的资料,大家基本上都知道@Scope是用来给依赖划定作用域的,那我今天就来来说说这个作用域的问题. 首先Dagger2中有一个现成的作用域注解,那就是…
Bean管理注解实现 Classpath扫描与组件管理 类的自动检测与注册Bean 类的注解@Component.@Service等作用是将这个实例自动装配到Bean容器中管理 而类似于@Autowired.@Required等注解则是将所代表的实例Bean1注册到需要这个实例的另一个Bean2中,在Bean2初始化时使其属性Bean1值不为null,他们并不能使Bean装配到Bean容器中.使用这些注解时,其代表的实例是要已经装配到Bean容器中的,否则会报错. <context:compon…
Dagger2 中虽然概念挺多的,但是大部分花时间都能理清.包括看人家的分析,Debug 代码下去也能懂.但是对于 scope 的用法以及实现原理还是有点难理解的.主要的问题也像简书上的文章所说: 自定义注解是怎么工作的?是不是命名了就能达到自己想要达到能够控制自己所提供的组建的生命周期的生命周期的功能?引用的说法就是这么一个回事: 比如Singleton就可以实现单例,PerActivity就可以创建的类实例与Activity“共生死“,是不是我定义一个PerFragment的注解,同样可以达…
Dagger的Scope注解代表的是作用域,通过实现自定义@Scope注解,标记当前生成对象的使用范围,标识一个类型的注射器只实例化一次,在同一个作用域内,只会生成一个实例, 然后在此作用域内共用一个实例.这样看起来很像单例模式,我们可以查看@Singleton其实就是@Scope的一个默认实现而已.当然,你得是同一个Component对象来生成 Dagger为我们提供了Scope的一种实现Singleton.单例???no!!!no!!!no!!!不是这么简单的.先看一下它的代码: @Scop…
1. 一个没有scope的component是不能依赖于另外一个有scope的component 2.@Singleton不是真正意义的单例,比如下面 @Singleton @Component class SingletonComponent{ } class Test{ void test(){ SingletonComponent c1 = DaggerSingletonComponent.create(); SingletonComponent c2 = DaggerSingletonC…
一.作用域Scope 之前了解RoboGuice的时候,我们知道它默认给我们提供了几个注解,ContextSingleton和Singleton,但是Dagger2更为灵活,只有javax包中提供的Singleton注解.更为强大的是,我们可以自定义作用域. 首先我们定义一个运行时的注解. @Scope @Retention(RetentionPolicy.RUNTIME) public @interface PerActivity { } 我们新增加一个Module,专门为Activity中提…
概述 Dagger2是一款使用在Java和Android上的静态的,运行时依赖注入框架.官方地址:http://google.github.io/dagger/ 记得当初刚学习Dagger2的时候看了许多博客,但是感觉上手依然困难,所谓光学不练就是这个意思吧 时至今日,用上此框架的同仁越来越多.分析文章也很多,上手相对要简单了许多. 学习Dagger2最先要明白的是其各个注解的含义及工作原理,这样才可以快速的上手和使用. 在这里简要记录一下在使用Dagger2过程中的感受和心得体会. 本文示例代…
1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Student代码 package com.qianmo.rxjavatext; import android.util.Log; import javax.inject.Inject; /** * Created by Administrator on 2017/4/17 0017. * E-Mail:…
Dagger2是第一个使用生成代码的方式实现依赖注入的框架.作为Dagger的升级版本,自然有它的优势,优先注重的是执行效率.本文着重介绍Dagger2.官方据点传送门: https://google.github.io/dagger//users-guide.html 首先来看一下依赖注入和控制反转 在软件工程领域,DI是一种实现控制反转用来解决依赖的设计模式,依赖是一个可以被使用的对象(服务),注入是把依赖传递给依赖它的对象(客户),即要使用它的对象,这样,服务就成了客户组成的一部分.传递服…
世界是普遍联系的,任何事物和个体都直接或间接相互依赖,在时空长河中共同发展.在面向对象的世界中,更是如此,类与类之间的依赖,关联关系,模块(亦或是分层架构中的层)之间的耦合关系,都是我们在软件开发实践中,时刻在处理着的联系. 在软件开发中,我们一直尝试弱化这种联系,以便让软件程序更健壮,更灵活,便于维护和升级.从面向过程遍程中提倡方法的分离(过程分离),到面向对象开发中的减少类依赖,层间低耦合,层内高类聚,无一不体现了这一点.正因为在面向对象的世界中,我们更容易处理类(对象),模块(或层)之间的…
概述 在2016年5,6月份开始在知乎上看到开发方法,那时候记得是看mvc,mvp,mvvm这三种开发模式区别,后面进一步了解到google在github上开源了使用这3种模式进行Android开发的demo.不同的项目有不同的情况,开发项目是找一个最适合的,而不是性能最好,开发时间最短等. MVP是一种开发模式或者架构,RxJava与Retrofit是两个库,前面的是异步的库,后面的是提供Restful请求的库,这两个库都是为了MVP开发模式服务的.当然,他的适用场景是业务逻辑复杂的项目,也就…
前言 在为dropwizard选择DI框架的时候考虑了很久.Guice比较成熟,Dagger2主要用于Android.虽然都是google维护的,但Dagger2远比guice更新的频率高.再一个是,Dagger2不同于guice的运行时注入,编译时生成代码的做法很好.提前发现问题,更高的效率. 还是那句话,百度到的dagger2资料看着一大堆,大都表层,而且和Android集成很深.很少有单独讲Dagger2的.不得已,去看官方文档. HelloWorld 官方的example是基于maven…
Dagger 依赖注入的诉求, 这边就不重复描述了, 在上文Spring以及Guice的IOC文档中都有提及, 既然有了Guice, Google为啥还要搞个Dagger2出来重复造轮子呢? 因为使用动态注入, 虽然写法简单了, 耦合也降低了, 但是带来了调试不方便, 反射性能差等一些缺点. 而Dagger跟Guice最大的差异在于, 他是编译期注入的, 而不是运行时. 他生成的代码可以直观的调试, 也不是通过反射, 而是通过构建工厂类. 下面我们用代码来简单演示一下. 构建工程 既然Dagge…
Dagger2 使用全解析 Dagger是一个注入工具,何为注入,我们要生产一批机器人,每个机器人都有一个控制器,我们可以在机器人内部 new 出一个控制器: class Robot { val controller = Controller() } 上面的代码 Robot 和 Controller 耦合,修改一下上面的代码,从外部传入控制器,这就叫注入: class Robot(val controller: Controller) 这样做的好处就是修改了控制器,但是不用修改机器人的代码,一般…
本文系原创博客,文中不妥烦请指出,如需转载摘要请注明出处! Dagger2的基本概念与实际应用 Alpha Dog 2016-11-30  10:00:00 本文Demo的github地址:https://github.com/DarkPointK/MyTestApplication.git 最近2天看了几篇关于Dagger2的博文,一开始是云里雾里,后来尝试着动手才整理出思绪,恍然大悟.在Dagger2对于程序的解耦有了更深一层的认识!现在将自己的理解整理出来,希望能帮到正在学习的同志! 想要…
一.使用前准备 1.打开app的build.gradle文件: 顶部停用apt插件: //添加如下代码,应用apt插件 apply plugin: 'com.neenbedankt.android-apt' dependencies中添加依赖: //Dagger2 compile 'com.google.dagger:dagger:2.4' apt 'com.google.dagger:dagger-compiler:2.4' //java注解 compile 'org.glassfish:ja…
No1: Project的build.gradle文件添加 buildscript{ dependencies{ ...classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } Module:app的build.gradle添加 apply plugin: 'com.neenbedankt.android-apt' ... dependencies{ ... apt 'com.google.dagger:dagger-compi…
初衷 Dagger2的初衷就是通过依赖注入让你少些很多公式化代码,更容易测试,降低耦合,创建可复用可互换的模块.你可以在Debug包,测试运行包以及release包优雅注入三种不同的实现. 依赖注入 使用依赖注入可以带来以下好处: 依赖的注入和配置独立于组件之外. 因为对象是在一个独立.不耦合的地方初始化,所以当注入抽象方法的时候,我们只需要修改对象的实现方法,而不用大改代码库. 依赖可以注入到一个组件中:我们可以注入这些依赖的模拟实现,这样使得测试更加简单. 举个栗子,如下图所示,左边是没有依…
只有Inject是不可以的,必须有Component public class Test { @Inject Person person; private void test() { System.out.println(person.name); } public static void main(String[] args) { new Test().test();//NullPointerException } } class Person { public String name; @I…
简介 dagger2:https://github.com/google/dagger Maven Central  2.11版本jar包下载 dagger:https://github.com/square/dagger compile 'com.google.dagger:dagger:2.11'//2017-9-17最新版本为[2.11] annotationProcessor 'com.google.dagger:dagger-compiler:2.11'//dagger-compile…
Dagger2使用攻略 Dagger 2 是 Square 的 Dagger 分支,是一种依赖注入框架.眼下由 Google 接手进行开发,Dagger2是使用代码自己主动生成和手写代码来实现依赖注入.据说在 Dagger 的基础上效率又提升了13%.而且相同功能强大. 1.Gradle配置 (1)须要配置apt 插件:(在project根文件夹build.gradle文件里加入例如以下代码) dependencies { ... classpath 'com.neenbedankt.gradl…