开源项目合集(一) 依赖注入
1.1 依赖注入概念
依赖(Dependency)
@H_404_16@<code class="java" data-origin=""
- ClassA中需要ClassB,通常我们在A的代码中new一个ClassB。
- 采用依赖注入技术之后,A不再需要直接new一个ClassB,它只需要定义一个私有的B对象,由相关的框架或者容器在外部把B实例化,再注入到A
- <code class="java" data-origin=""
主页https://github.com/JakeWharton/butterknife@H_502_18@
- <code class="java" data-origin=""
用途: 主要用来简化各种初始化控件的操作@H_502_18@
<code class="java" data-origin=""
配置:@H_502_18@
<code class="java" data-origin="" <code data-origin="" <code data-origin="" 1.3 AndroidAnnotations@H_502_18@@H_502_18@@H_502_18@
<code data-origin=""1.3 AndroidAnnotations@H_502_18@@H_502_18@@H_502_18@
- <code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
主页:http://androidannotations.org/@H_502_18@@H_502_18@@H_502_18@
- <code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
用途:
- 使用依赖注入Views,extras,System Service,resources
- 简化线程模型
- 事件绑定
- REST Client
<code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
在project/build.gradle 文件中按下图所示添加代码:@H_502_18@@H_502_18@@H_502_18@
<code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
<code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
在app/build.gradle 文件中按下图所示添加代码:@H_502_18@@H_502_18@@H_502_18@@H_502_18@
<code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
<code class="java" data-origin="" <code data-origin="" <code data-origin="" <code class="gradle" data-origin="" <code class="gradle" data-origin="" 1.4 Dagger2@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
<code data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""1.4 Dagger2@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
Dagger2的优点
- <code class="java" data-origin=""
- 容易调试,完全具体地调用提供和创建的堆栈
- <code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
在app/build.gradle 文件中按下图所示添加代码:
<code class="gradle" data-origin=""
@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code class="java" data-origin=""
- <code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
@Component: 是对象使用者和对象创建者的一个桥梁。该注解通常需要一个module参数,指明哪个module最终为component生成对象。@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code class="java" data-origin=""
- <code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
创建Module,并在其中使用Provides:
<code class="java" data-origin=""
@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code class="java" data-origin=""
<code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="java" data-origin=""
创建Component:@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
<code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
<code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
Rebuild工程,生成对应的以Dagger开始的工具类DaggerMainComponent@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
<code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
MainActivity里面有个User字段,该字段用@Inject注解,然后用工具类DaggerMainComponent注入User对象:@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
<code class="java" data-origin=""
<code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
<code data-origin=""
<code data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""<code class="java" data-origin=""<code class="java" data-origin=""<code class="java" data-origin=""dagger2使用总结:@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
对象的两种来源:@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code data-origin=""
<code data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""<code class="java" data-origin=""<code class="java" data-origin=""<code class="java" data-origin=""对象自己有构造器,构造器有@Inject注解@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code data-origin=""
<code data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""<code class="java" data-origin=""<code class="java" data-origin=""<code class="java" data-origin=""Component对应的Module里面有@Provider注解,返回该类型的对象@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
对象获取的两种方式:@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code data-origin=""
<code data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""<code class="java" data-origin=""<code class="java" data-origin=""<code class="java" data-origin=""注解@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code data-origin=""
<code data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""<code class="gradle" data-origin=""<code class="java" data-origin=""<code class="java" data-origin=""<code class="java" data-origin=""Component里面定义一个方法来返回一个对象@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
单例@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
延迟注入、懒加载@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
- <code data-origin=""
<code data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="gradle" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
<code class="java" data-origin=""
可以注入的对象:OKHttpClient,Retrofit service,Volley RequestQueue,Dao(懒加载)@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@
<code data-origin="" <code class="gradle" data-origin="" <code class="gradle" data-origin="" <code class="gradle" data-origin="" <code class="java" data-origin="" <code class="java" data-origin="" <code class="java" data-origin="" @H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@@H_502_18@public class MainActivity extends Activity {" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas,Inconsolata,Courier,monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">public class MainActivity extends Activity {
private ProductBean mProduct;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//mProduct = new ProductBean("1","鞋子");
Utils.injectProduct(this);
}
}buildscript {" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas,monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">buildscript {
repositories {
mavenCentral() // 添加这一行
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //添加这一行
}
}apply plugin: 'android-apt' // 应用apt插件" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas,monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">apply plugin: 'android-apt' // 应用apt插件
dependencies {
compile 'com.jakewharton:butterknife:8.1.0'
apt 'com.jakewharton:butterknife-compiler:8.1.0'
}buildscript {" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas,0)">buildscript {
repositories {
mavenCentral() // 添加这一行
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
'com.neenbedankt.gradle.plugins:android-apt:1.8' // 添加这一行
}
}apply plugin: 'android-apt'" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas,monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">apply plugin: 'android-apt'
apt {
arguments {
androidManifestFile variant.outputs[0]?.processResources?.manifestFile
}
}
dependencies {
apt "org.androidannotations:androidannotations:4.0.0"
compile "org.androidannotations:androidannotations-api:4.0.0"
}-classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas,152)">'com.neenbedankt.gradle.plugins:android-apt:1.8'apply plugin: 'android-apt'" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas,152)">'android-apt'
dependencies {
apt 'com.google.dagger:dagger-compiler:2.5'
'com.google.dagger:dagger:2.5'
provided 'org.glassfish:javax.annotation:10.0-b28'
}@Module" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas,monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;"> @Module
MainModuel {
@Provides
User provideUser() {
return new User("zhangsan",12);
}
}@Component(modules = MainModuel.class)" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas,monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;"> @Component(modules = MainModuel.class)
interface MainComponent {
inject(MainActivity activity);
}public class MainActivity extends AppCompatActivity {" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas,0)">AppCompatActivity {
@Inject
User user;
@Override
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainComponent component = DaggerMainComponent.create();
component.inject(this);
}
}@H_502_18@