提供一個HttpObject對象
public class HttpObject {
}
提供一個Module
@Singleton
@Module
public class HttpModule{
@Singleton
@Provides
public HttpObject provederHttpObject(){
return new HttpObject();
}
}
單例類的使用需要在
@Module修飾的類和@Provides修飾的方法上分別添加@Singleton。
提供一個Component
@Singleton
@Component(modules = {HttpModule.class,DatabaseModule.class})
public interface MyComponent
void injectMainActivity(MainActivity mainActivity);
void injectSecondActivity(SecondActivity secondActivity);
}
同時在
@Component修飾的Componet上添加@Singleton。
從MainActivity跳轉(zhuǎn)到SecondActivity,來觀察HttpObject 是否是一個對象。
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Inject
HttpObject httpObject1;
@Inject
HttpObject httpObject2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//第一種注入方法
DaggerMyComponent.create().injectMainActivity(this);
//第二種注入方法
// DaggerMyComponent.builder().httpModule(new HttpModule())
// .build()
// //到這里就已經(jīng)產(chǎn)生了module和component對象
// .injectMainActivity(this);
Log.i("log",httpObject1.hashCode()+"");//189244270
Log.i("log",httpObject2.hashCode()+"");//189244270
Log.i("log",databaseObject.hashCode()+"");//69880476
}
public void jump(View view) {
this.startActivity(new Intent(this,SecondActivity.class));
}
}
SecondActivity.java
public class SecondActivity extends AppCompatActivity {
@Inject
HttpObject httpObject;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerMyComponent.create().injectSecondActivity(this);
Log.i("log",httpObject.hashCode()+"");//115744208
}
}
可以看到,在MainActivity中HttpObject的HashCode是一樣的,說明是一個對象;而在SecondActivity中HttpObject的HashCode發(fā)生了變化,和MainActivity是不一樣的,這就是局部單例。
下面來把局部單例變?yōu)槿謫卫?/p>
其它的類都不需要修改,只需要在Application中操作即可。
MyApplication.java
public class MyApplication extends Application {
private MyComponent myComponent;
@Override
public void onCreate() {
super.onCreate();
myComponent= DaggerMyComponent.builder()
.httpModule(new HttpModule())
// .presenterComponent(DaggerPresenterComponent.builder()
// .presenterModule(new PresenterModule())
.build();
}
public MyComponent getAppComponent(){
return myComponent;
}
}
在Activitie中使用的如下:
((MyApplication)getApplication()).getAppComponent().injectMainActivity(this);