a.什么是依赖:假设有2个类,在类B中有类A的实例,这时我们就说,B对A产生了依赖
public class Dog {
…
Cat cat;
…
public Dog() {
cat = new Cat();
}
}
分析:上面这个例子我们不难发现,有很大的问题:
1.这种生明对象的方式非常的不好,如果Cat类中的构造方法发生了变化,那么Dog类中的创建Cat类实例的代码也要
发生变化.
2.如果我们需要测试不同的Cat对象对Dog的影响,这样就变得非常困难,因为Cat的生明,在Dog中写死了.
为了解决上面的哪种声明对象的方式产生的弊端我们就可以使用到依赖注入,在Android中常使用的框架是:RoboGuice、Dagger
这两种框架就我个人感觉Dragger在这方面使用是更好的.
Dragger2是比Dragger更新的依赖注入框架,Dragger的注解的简单解释:
准备
Android Studio是必须的。其他:
1. Dagger2 基础
注解讲解:
@Module这个annotation修饰的类专门用来提供依赖
@Provides这个annotation修饰的方法用在Module类里
@Inject用来annotation一个依赖(可以是构造方法、field或者一般的方法)
@Component连接@Module和注入的桥梁
2. 在Android中我最常使用的第三方依赖注入的框架是Dragger2,它的用法是(Android studio中的用法):
步骤1.
a.在project/build.gradle 文件中按下面添加代码: classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
b2. 在app/build.gradle 文件中按下面添加代码:
* apply plugin: 'com.neenbedankt.android-apt'
* compile 'com.google.dagger:dagger:2.2'
* apt 'com.google.dagger:dagger-compiler:2.2'
* provided 'org.glassfish:javax.annotation:10.0-b28'
步骤2.我们定义一个仓库来,也就是有Module注解的类,Module注解的类一般都用Module来结尾,也就是下面这种格式:
@Module
public class AppModule{
}
步骤3.在我们的注解仓库里面定义一个方法,这个方法就是我们需要创建的实例对象,这也就是我们需要注入的对象,它
使用的方法是,在AppModule中创建一个方法,这个方法以provide开头,比如下面这种方式:
@Module
public class AppModule {
@Provides
public void provideUser(){
return new User();//这就是我们需要注入的实例对象
}
}
步骤4.就是我们需要创建一个接口,来实现对注入框架的使用,这个接口一般是以Component结尾的,使用方式如下:
@Component(modules = AppModule.class)//这里面就写我们我们需要将哪个Modul注入,如上面的AppModule
public interface MainActivityComponent{//要在哪里注入就用什么类名来命名这个接口
void inject(MainActivity activity);//这里就是表示我们要将我们需要注入的事物注入到MainActivity中
}
步骤5.利用对应的以Dagger工具类初始化,并注入对象.示例代码:
public class MainActivity extends AppCompatActivity {
@Inject
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainActivityComponent component = DaggerMainActivityComponent.builder().mainActivityModuel(newMainActivityModuel()).build();
component.inject(this);
}
}