開(kāi)源項(xiàng)目的依賴(lài)注入
依賴(lài)注入概念
依賴(lài)(Dependency)
? ClassA中需要ClassB惠昔,通常我們?cè)贏的代碼中new一個(gè)ClassB。
? 采用依賴(lài)注入技術(shù)之后摹闽,A不再需要直接new一個(gè)ClassB忿族,它只需要定義一個(gè)私有的B對(duì)象酷麦,由相關(guān)的框架或者容器在外部把B實(shí)例化句灌,再注入到A;
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);
}
}
依賴(lài)注入(DI:Dependency Injection):
ClassA的運(yùn)行依賴(lài)于ClassB账胧,如果ClassB對(duì)象的獲取需要ClassA自己去實(shí)現(xiàn)的話(huà)悟耘,常常會(huì)導(dǎo)致代碼高度耦合落蝙。反過(guò)來(lái),如果ClassB對(duì)象的獲取是由外部容器注入的暂幼,這個(gè)“依賴(lài)注入”的過(guò)程常常被稱(chēng)為控制反轉(zhuǎn)(IOC:Inversion of Control), 就是獲取對(duì)象的方式變了依賴(lài)注入是實(shí)現(xiàn)控制反轉(zhuǎn)的方式之一(另一方式是依賴(lài)查找),目的就是為了讓調(diào)用者和被調(diào)用者之間解耦可以注入依賴(lài)的模擬實(shí)現(xiàn),使得測(cè)試變得更加簡(jiǎn)單.
依賴(lài)注入方式:
? set方法筏勒。給外部容器的一個(gè)接口,傳入依賴(lài)的對(duì)象旺嬉。
? 基于構(gòu)造函數(shù)管行。在新建對(duì)象時(shí),傳入依賴(lài)的對(duì)象邪媳。
? 基于Java的注解(Annotation)功能
ButterKnife黃油刀
? 主頁(yè) https://github.com/JakeWharton/butterknife
? 用途: 主要用來(lái)簡(jiǎn)化各種初始化控件的操作
配置:
在項(xiàng)目根目錄下build.gradle文件中添加apt編譯插件:
buildscript {
repositories {
mavenCentral();
jcenter();
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
在app/build.gradle文件中dependencies節(jié)點(diǎn)添加如下代碼
apply plugin: 'android-apt'
// 應(yīng)用apt插件
dependencies {
compile 'com.jakewharton:butterknife:8.1.0'
apt 'com.jakewharton:butterknife-compiler:8.1.0'
}
安裝Android ButterKnife Zelezny插件, 安裝成功以后重啟Android Studio
AndroidAnnotations
? 主頁(yè): http://androidannotations.org/
? 用途:
1. 使用依賴(lài)注入Views,extras,System Service,resources
2. 簡(jiǎn)化線(xiàn)程模型
3. 事件綁定
4. REST Client
配置:
在project/build.gradle 文件中按下圖所示添加代碼:
buildscript {
repositories {
mavenCentral()
// 添加這一行
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' // 添加這一行
}
}
在app/build.gradle 文件中按下圖所示添加代碼:
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"
}
注入View捐顷,注入Click事件。注意view和click事件不能是private
1. 注入系統(tǒng)service雨效,設(shè)置全屏迅涮,設(shè)置WindowFeature
2. 簡(jiǎn)化線(xiàn)程模型
@Background
@UiThread