首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Dagger Android支持库(译文)

使用Dagger编写Android应用程序一个主要困难是,许多Android框架类都由操作系统本身实例化,如Activity和Fragment,但如果Dagger可以创建所有注入对象,效果最佳。...subcomponent 和他 builder 没有其他方法或者超类型,而不是步骤2中提到方法或超类型,则可以使用 @ContributesAndroidInjector 为您生成它们。...所有每个子类需要做是绑定相应 @Subcomponent。 如果没有复杂类层次结构,Dagger提供了一些基本类型,例如DaggerActivity和 DaggerFragment。...Dagger 还为同一目的提供了 DaggerApplication - 您需要做就是扩展它并覆盖applicationInjector()方法以返回应该注入 Application 组件。...如果您肯定您 AndroidInjector.Factory 没有为注入对象保留实例,则可以通过将 @SuppressWarnings(“dagger.android.ScopedInjectoryFactory

94430

详解Kotlin 中使用和配置 Dagger2

@Singleton // 如果有 Module 使用了该注解实现单例模式,这里也需要添加 @Component(modules = arrayOf( ActivityModule::class...class MyApplication : DaggerApplication() { // 如果项目中使用了 v4.Fragment 要继承 support 包下 DaggerApplication...好在 google 也同样意识到了这个问题,所以在 Dagger2 2.11 版本及其以后,Dagger2 又为我们提供了一个 @ContributesAndroidInjector 注解,大大简化了使用...之后每添加一个 Activity,只需要在 Activity 添加一个对应方法就可以了。...语法解析 Dagger 2 配置使用说完了,但是相信很多人对上面的一些语法都不了解,这里来简单说明: // Kotlin 提供方法,能简单快速生成一个数组 val array = arrayOf

1.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

android学习笔记----Fragment

savedInstanceState 参数是在恢复Fragment时,提供上一个Fragment实例相关数据 Bundle。...如需了解有关保存状态详细信息,请参阅 Activity 文档) inflate() 方法带有三个参数: 1.您想要扩展布局资源 ID; 2.将作为扩展布局父项 ViewGroup。...传递 container 对系统向扩展布局根视图(由其所属父视图指定)应用布局参数具有重要意义; 3.指示是否应该在扩展期间将扩展布局附加至 ViewGroup(第二个参数)布尔值。...因为系统Activity只能用来盛装系统自带Fragment,而无法盛装V4包中Fragment,因为系统Activity根本无法识别V4包中Fragment,因为这根本就不是一块代码!...又比如在Fragment中嵌套Fragment,这个功能是在api 17(android 4.2)才开始支持如果使用是内置Fragment,那么4.2之前系统设备运行就会崩溃,说是不支持方法

61511

Android路由框架ARouter分析

一、路由方案 原生路由方案缺点: 显式:直接类依赖,耦合严重 隐式:规则集中式管理,协作困难 Manifest扩展性较差 跳转过程无法控制 失败无法降级 ARouter优势: 使用注解,实现了映射关系自动注册...与 分布式路由管理 编译期间处理注解,并生成映射文件,没有使用反射,不影响运行时性能 映射关系按组分类、多级管理,按需初始化 灵活降级策略,每次跳转都会回调跳转结果,避免StartActivity(...()方法,该方法实际调用了代理类_ARouternavigation(Class<?...mContext : context; switch (postcard.getType()) { case ACTIVITY://如果是Acitvity,实现Intent跳转 // Build intent...,返回目标对象实例 return postcard.getProvider(); case BOARDCAST: case CONTENT_PROVIDER: case FRAGMENT://如果是Fragment

1.6K20

Android 组件化 —— 路由设计最佳实践

AndroidMainfest集中式管理比较臃肿 无法动态修改路由,如果页面出错,无法动态降级 无法动态拦截跳转,譬如未登录情况下,打开登录页面,登录成功后接着打开刚才想打开页面 H5、Android...路由定义 我这边是完全按照URL规范了,这里要说一下,现在好多方法是把参数定义在path里面的,虽然这样做,有不需要额外传参数好处,但是这样路由就没有那么灵活,调试起来就没有那么方便了。...,但是AndroidManifest配置还是比较不方便 我现在还是采用了注解,后面我会结合两种方法,将注解自动修改AndroidManifest,对于接入方是没有变动方法已经找到了,用自定义Lint...做一个像Swagger平台,支持一键导出所有路由、二维码打开路由 注解修改AndroidManifest,不再需要路由表 支持路由方法接收器,Url直接打开某个方法,不再局限Activity已实现 如果大家有意见...是如何产生 LauncherFrom 提供了一种hook activitythread找到launchedFromPackage方法,不过也只支持5.0以上 高效过滤Intents 只有包含特定Package

1.6K30

Effective-java-读书笔记之枚举和注解

枚举天生不可变, 因此所有的域都是final.有时候需要将不同行为与每个常量关联起来, 可以在枚举中定义抽象方法, 这样添加新常量时候就必须提供这个方法.如果多个枚举常量同时共享相同行为, 考虑策略枚举...(无法打印, 无法遍历.)java.util提供了EnumSet类来有效地表示从单个枚举类型中提取多个值多个集合.第37条 用EnumMap代替序数索引有时候, 你可能会见到用ordinal方法来索引数组代码...只要实现这个接口就可以.虽然无法编写可扩展枚举类型, 却可以通过编写接口以及实现该接口基础枚举类型, 对它进行模拟....没有加@Override注解时候, 编译器不会报错, 而是把它当做一次方法重载.加上@Override注解, 编译器会提示, 可以及时发现错误.应该在你想要覆盖超类声明每个方法声明中使用@Override...注解.如果不写IDE会有警告.如果是实现抽象方法, 不写@Override注解IDE不会警告, 但是这样做没什么坏处.第41条 用标记接口定义类型标记接口(marker interface)是没有包含方法声明接口

53950

Dubbo源码篇05---SPI神秘面纱---使用篇

//依次判断当前第三方实现类全类名是否已经存在于providers集合中,如果存在跳过 //如果不存在,加入providers集合中...Dubbo 扩展能力并不仅仅只是发现扩展服务实现类,而是在此基础上更进一步,如果扩展属性依赖其他对象, Dubbo 会自动完成该依赖对象注入功能。...", "spring"); //如果url中没有获取到key=frame.work键值对,并且SPI注解没有指定默认值,那么会抛出异常 if (string == null...如果后期对于某个扩展接口,我们不想使用dubbo为我们提供默认URL动态匹配逻辑了,而是想要自定义动态匹配规则,也就是说我们想要指定一个实现类作为自适应扩展点,这时候我们可以将@Adaptive注解加在某个实现类上...例如下面这段代码表示如果当前为所处环境为PROVIDER服务提供方,激活当前扩展实现类: @Activate(group = CommonConstants.PROVIDER) public class

13120

CodeWave系列:6.CodeWave 智能开发平台 扩展依赖库开发

对于基础信息收集会读取工程根路径中pom.xml,如果为父子工程,对子工程打包会读取子工程下pom.xml文件。...pom.xml配置示例: 标题通过解析pom.xml中name标签来生成,此标签为可选项,如果未声明name标签,默认为artifactId标签对应值。...pom.xml配置示例: 描述是通过解析pom.xml中description标签来生成,此标签为可选项,如果未声明description标签,默认扩展依赖库描述为空字符串。...成员变量需要有对应get和Set方法。 类中如果提供了有参构造函数,必须显式提供无参构造函数。 数据结构必须有成员变量,否则无意义。...3.3.3 声明为Configuration(自定义参数配置) 在类成员变量上添加@NaslConfiguration注解即声明为Configuration,可以设置参数在不同环境下默认值,如果未指定的话默认为空字符串

5810

Spring注解缓存设计原理及实战

true,则在方法没有执行时候就清空缓存,默认情况下,如果方法执行抛出异常,则不会清空缓存 可扩展 Spring注解能满足一般应用对缓存需求,但随着应用服务复杂化,大并发高可用性能要求下,需要进行一定扩展...先不考虑如何持久化缓存,毕竟这种三方实现很多,要考虑是,怎么利用Spring提供扩展点实现我们自己缓存,且在不改原来已有代码情况下进行扩展,是否在方法执行前就清空,默认为false,如果指定为true...,则在方法没有执行时候就清空缓存,默认情况下,如果方法执行抛出异常,则不会清空缓存。...自定义注解缓存 注解缓存使用,可有效增强代码可读性,同时统一管理缓存,提供较好扩展性。 为此,酒店商家端在Spring注解缓存基础上,自定义了适合自身业务特性注解缓存。...非public方法无法使用注解缓存实现。

31210

阿里ARouter使用及源码解析(一)

隐式intent实现方式,则会出现规则集中式管理,导致协作变得困难; 可配置性较差,一般而言配置规则都是在Manifest中,这就导致了扩展性较差; 跳转过程无法控制,一旦使用了StartActivity...,如果集合为空,创建一个新组,将该节点添加进去,并将组集合保存在groupmap中; //不为空,添加到所属组集合中去 Set...@Route注解中有设置group标识,作为groupname,如果没有就取/xxx1/xxx2,xxx1作为groupname,并将同一组路由节点放到同一个集合中去。...其实build()方法目的只有一个就是根据路由,封装成Postcard对象,其对象贯穿之后整个路由过程。Postcard 包含了众多属性值,提供了路由过程中所有的控制变量。...PROVIDER节点类型,从服务节点列表中获取,如果没有实例化,并保存在服务节点列表Warehouse.providers中 //并将实例化对象设置给postcard

1K20

框架分析(11)-测试框架

提供了一组注解和断言方法,以及一个执行测试运行器。 框架主要特性 注解支持 JUnit使用注解来标记测试方法和测试类。...异常测试支持 JUnit允许测试方法标记为期望抛出特定异常。如果测试方法确实抛出了期望异常,测试将被视为通过。如果测试方法没有抛出异常或者抛出了其他异常,测试将被视为失败。...可以使用@RunWith和@Suite注解来创建测试套件。 超时测试 JUnit允许设置测试方法超时时间,如果测试方法执行时间超过指定时间,测试将被视为失败。...优缺点分析 优点 简单易用 JUnit框架提供了简单易用API和注解,使得编写和运行单元测试变得非常简单。...总结 JUnit框架提供了一套强大工具和功能,使得编写和运行单元测试变得更加简单和高效。它特性包括注解支持、断言方法、异常测试支持、参数化测试、测试套件、超时测试、前置条件和扩展模型等。

19720

【Android 组件化】使用 ARoute 实现组件化 ( ARoute 初始化 及 界面跳转 源码分析 )

LogisticsCenter.init(mContext, executor); 是核心逻辑 , 在该方法中 , 加载了路由表 , 路由表类是 注解处理器 在编译时生成类 , 生成目录是 " D...Class 类对象 , 通过之前 ARoute 初始化到内存路由表补充跳卡中数据 ; 然后判断该跳转是否是绿色通道 , 如果是继续执行跳转 ; 如果不是 , 触发拦截器 , 拦截器判定未通过 ,...中断跳转 , 拦截器判定通过 , 继续执行跳转 ; 这里拦截器一般用于权限鉴定 , 比如用户是否购买会员 , 是否购买服务 , 是否拥有权限等等 ; 拦截器详细用法自行去 GitHub 上查看...Warehouse 对应静态成员中 , 这里直接从该静态成员中获取 路由 数据 ; 如果从 Warehouse 中获取 路由信息 失败 , 说明路由表还没有加载 , 那么先加载路由表 , 路由表加载成功后...postcard.getPath()); if (null == routeMeta) { // Maybe its does't exist, or didn't load. // 如果路由表还没有加载

1K20

dubbo(一)SPI机制与实现路径

二、JDK标准-SPI 在面向对象中,模块之间都是基于接口,模块之间如果其中一个模块或接口实现需要进行更改,就需要修改代码。...(2)getAdaptiveExtension获取扩展装饰类对象 被@Adaptive注解修饰类就是扩展装饰类,点开注解后我们可以看到,@Adaptive注解只能修饰类和方法。...如果实现类类中包含了activate注解修饰类,则会把实现类放到cachedActivates中。 剩余其他类,放在cachedNames中。 private Class<?...动态类中方法,只有方法被@Adaptive修饰方法才会实现。没有被修饰方法无法实现。...@Adaptive注解总结 官方文档中解释为:Adaptive可注解在类或方法上。当注解在类上时,dubbo不会为该类生成代理类,表示扩展加载逻辑由人工编码完成。

83420

一线互联网架构师用一文带你彻底吃透Hystrix源码,不服真不行

本文给大家介绍内容是Hystrix源码解析; Hystrix源码解析 @HystrixCommand注解是由名为javanicaHystrix contrib库提供。...注解拦截和处理。...工厂新建一个熔断器,源码如下: HystrixCircuitBreaker.Factory类根据CommandKey对熔断器进行了缓存,如果缓存里存在Key,直接取缓存里Key,如果不存在,新建...下面是主要代码实现: 微服务架构关键技术是为微服务提供高可用、可扩展性、可容错性平台基础设施。...Spring Cloud作为微服务治理平台为我们提供了相关技术和服务组件,而开源解决方案往往无法做到满足个性需求,我们需要根据实际场景和业务特性做定制化开发。

33410

【Dubbo源码】SPI机制源码解析

,(加载具体详情请看下面) 如果扩展类中有带有注解@Adaptive,说明是自适应扩展类,直接返回 一个type有且只有一个自适应扩展如果当前type中所有的扩展类中没有找到带有注解@Adaptive...,dubbo会自动生成一个; 先拼接类 查询当前type所有方法中是否有注解@Adaptive(是方法注解),如果一个都没有的话,那么就会抛出异常; 遍历每一个method,如果方法没有注解...cachedClasseskey是左边值,value是右边对应Class 如果没有加载过,开始加载 如果当前type上@SPI有默认值,例如@SPI("dubbo"),则将其设置到属性cachedDefaultName...type实现类 如果扩展类中带有注解@Adaptive表示这个是自适应扩展类;并且缓存到属性cachedAdaptiveClass中;如果文件中扩展类有多个@Adaptive,则会抛异常,最多只有一个自适应扩展类...如果不是自适应扩展类也不是包装类,并且扩展类带有注解@Activate,放入map属性cachedActivates中;key是name, value是注解Activate loader.getExtension

1.4K50

spring相关注解_redis和session区别

AnnotatedElement 本身直接提供方法效果一致,比较特殊 find 开头方法,此类方法会从AnnotatedElement 层级结构中寻找存在注解,关于“层级结构”,Spring...同理,假如我们扫描是 Foo.class 中一个名为 foo,没有参数且没有返回值方法 find 除了扫描 Foo.foo() 外,还会扫描器 FooSuper 和 FooInterface 中没有参数且没有返回值方法注解...这个选择不难理解,java.lang包下提供都是诸如@Resource或者 @Target 这样注解,而springframework.lang包下提供都是 @Nonnull 这样注解,这些注解基本不可能作为有特殊业务意义注解使用...不过需要重点关注一下对方法扫描,Spring 针对方法扫描制定了比较严格标准,假设扫描原始方法称为 A,被扫描方法 B,要允许获得 B 上注解必须满足如下规则: B 不能是桥接方法;...当前注解如果是个可从重复注解容器注解,则将其内部可重复注解全部取出平摊后,是否存在要找注解如果当不限制只查找注解本身,继续搜索它所有元注解,这些元注解是否存在要找注解

25620

基于SpringBoot0代码全自动构建中小型项目

代码模板可根据实际项目的需求来扩展,由于每个公司业务都不太一样,所以只提供了一些比较基础、通用模板,主要是提供一个思路来减少重复代码编写。...进行配置,主要是JDBC,项目包名等配置 对src/test包内代码生成器CodeAuthGenerator中main测试方法进行配置,主要是配置需要生成表名称,根据表名来生成代码 如果只是想测试的话...开发建议 表名,建议使用小写,多个单词使用下划线拼接 Entity内成员变量与表字段数量对应,如需扩展成员变量(比如连表查询)建议创建DTO,否则需在扩展成员变量上加@Transient注解,详情见通用...RequestMapping注解值,不能以"/“开头,否则生成自动文档无法进行在线测试 例如:@RequestMapping(”/user")需要写成@RequestMapping(“user”...对象(例如User对象),使用XDoc传值测试比较麻烦 如果需要测试,进行传JSON字符串,并且在方法对象前添加RequestBody注解 @PostMapping("add")

71910

2021-Java后端工程师面试指南-(SSM)

onRefresh() 方法:该方法为模板方法提供给子类扩展实现,可以重写以添加特定于上下文刷新工作,默认实现为空。...支持当前事务情况: TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,加入该事务;如果当前没有事务,创建一个新事务。...TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,加入该事务;如果当前没有事务,则以非事务方式继续运行。...TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,加入该事务;如果当前没有事务,抛出异常。...源码中看出,他们并没有用到那个earlySingletonObjects这个缓存,所以就不能解决循环依赖 解决Spring无法解决循环依赖一些方式 项目中如果出现循环依赖问题,说明是spring默认无法解决循环依赖

85630
领券