本文主要是介绍Dagger2 入门解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
在为dropwizard选择DI框架的时候考虑了很久。Guice比较成熟,Dagger2主要用于Android。虽然都是google维护的,但Dagger2远比guice更新的频率高。再一个是,Dagger2不同于guice的运行时注入,编译时生成代码的做法很好。提前发现问题,更高的效率。
作者:@Ryan-Miao
本文为作者原创,转载请注明出处:http://www.cnblogs.com/woshimrf/p/hello-dagger.html
还是那句话,百度到的dagger2资料看着一大堆,大都表层,而且和Android集成很深。很少有单独讲Dagger2的。不得已,去看官方文档。
HelloWorld
官方的example是基于maven的,由于maven天然结构的约定,compile的插件生成可以和maven集成的很好。而我更喜欢gradle,gradle随意很多,结果就是编译结构需要自己指定。
demo source: https://github.com/Ryan-Miao/l4dagger2
结构如下:
.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── readme.md
├── settings.gradle
└── src└── main├── java│ └── com│ └── test│ └── l4dagger2│ └── hello│ ├── CoffeeApp.java│ ├── CoffeeMaker.java│ ├── DripCoffeeModule.java│ ├── ElectricHeater.java│ ├── Heater.java│ ├── Pump.java│ ├── PumpModule.java│ └── Thermosiphon.java├── resources└── webapp11 directories, 15 files
加载依赖
build.gradle
plugins {id "net.ltgt.apt" version "0.12"id "net.ltgt.apt-idea" version "0.12"id "net.ltgt.apt-eclipse" version "0.12"
}repositories {mavenLocal()maven {url "http://maven.aliyun.com/nexus/content/groups/public/"}mavenCentral()
}group 'com.test'
version '1.0-SNAPSHOT'apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'idea'sourceCompatibility = 1.8dependencies {compile 'com.google.dagger:dagger:2.12'apt 'com.google.dagger:dagger-compiler:2.12'testCompile group: 'junit', name: 'junit', version: '4.12'
}
Note that:
- plugins
插件需要放到最开头。然后,由于设计编译时生成sourceSet类,针对IDE需要添加对应的插件。
- dagger2
生成的类放在build/generated/source/apt/main
Coding Time
接下来的内容就和官方的demo一样了。
com.test.l4dagger2.hello.CoffeeApp
public class CoffeeApp {@Singleton@Component(modules = { DripCoffeeModule.class })public interface CoffeeShop {CoffeeMaker maker();}public static void main(String[] args) {CoffeeShop coffeeShop = DaggerCoffeeApp_CoffeeShop.builder().build();coffeeShop.maker().brew();}
}
com.test.l4dagger2.hello.DripCoffeeModule
这篇关于Dagger2 入门解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!