绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Dagger基本的使用
2022-04-29 10:21:40

记录此文,以此学习
dagger任意对象都是可以注入的,dagger主要用于中大型项目。
Dagger的作用:

省去了new对象的过程,增加开发效率
每个app中的Application管理整个app的全局类实例,所有的全局类实例都统一交给ApplicationComponent管理,并且它们的生命周期与app的生命周期一样。每个页面对应自己的Component,页面Component管理着自己页面所依赖的所有类实例。因此Component,Module,整个app的类实例结构变的很清晰。
在项目中,有一些对象使用的很频繁,比如http网络请求,database操作数据库,一个大型项目中,成千上万次都是比较正常的,使用的时候如果不从外部注入的话,这1000个对象在程序中的初始化会有1000个,哪怕写了一个单例,也会有1000次获取这个单例,加入有一天这个对象的初始化或者产生发生了变化,那么这1000多个代码全部都要进行修改。 现在需要把这个对象引用和对象初始化隔离开,把对象初始化放到一个地方,然后注入到需要使用的地方,加入要改代码,只需要改对象初始化的地方一次,其它使用的地方都会发生变化。
MVP模式中也可以解耦。
归结起来,Dagger的好处或者作用就是提高工作效率,代码层次分明,解耦。

如何使用?

Module提供对象,对象的初始化工作都会写在这个Module中,项目中的Module会有很多个,比如Module1(提供httpObject),Module2(提供databaseObject),Module3(提供PresenterObject)当我们想向Activity或者其他的地方注入的时候,这个时候需要一个Component,把3个Module放到Component中,然后就可以在Activity或者其他的地方使用httpObject和databaseObjet了。

Dagger2的基本使用

先来两个对象类
HttpObject.java

public class HttpObject {
}
DatabaseObject.java

public class DatabaseObject {
}
再来两个Module
HttpModule.java

@Module
public class HttpModule{
@Provides
public HttpObject provederHttpObject(){
return new HttpObject();
}
}
DatabaseModule.java

@Module
public class DatabaseModule {
@Provides
public DatabaseObject providerDatabaseObject(){
return new DatabaseObject();
}
}
使用@Module表示这是一个module,使用@Provides表示这个方法可以提供一个对象。
再来一个Component
MyComponent.java

@Component(modules = {HttpModule.class,DatabaseModule.class})
public interface MyComponent {
void injectMainActivity(MainActivity mainActivity);
}
@Component表示这是一个组件,将相关的类使用modules放到Component中,MyComponent这个类会自动生成DaggerMyComponent,在Activity或者其它类中注入的时候使用DaggerMyComponent。

再MainActivity中使用

public class MainActivity extends AppCompatActivity {
@Inject
HttpObject httpObject1;
@Inject
HttpObject httpObject2;
@Inject
DatabaseObject databaseObject;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//种注入方法
DaggerMyComponent.create().injectMainActivity(this);
//第二种注入方法
// DaggerMyComponent.builder().httpModule(new HttpModule())
// .build()
// //到这里就已经产生了module和component对象
// .injectMainActivity(this);

Log.i("log",httpObject1.hashCode()+"");//189244270
Log.i("log",httpObject2.hashCode()+"");//106973711
Log.i("log",databaseObject.hashCode()+"");//69880476
}

————————————————
版权声明:本文为CSDN博主「众生回避」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32113133/article/details/102804985

分享好友

分享这个小栈给你的朋友们,一起进步吧。

DaggerDB
创建时间:2022-04-29 10:21:09
DaggerDB
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • gaokeke123
    专家
戳我,来吐槽~