ButterKnife
1.app-配置
1.androidx
implementation 'com.jakewharton:butterknife:10.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
2.其它版本
/**
* ButterKnife依赖
*/
implementation 'com.jakewharton:butterknife:8.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.0.0'
2.Module配置
3.详细代码
@Route(path = "/user/activity")
public class MainActivity extends AppCompatActivity {
@BindView(R.id.usr_btn)
Button button;
@BindString(R.string.userModule)
public String loginErrorMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
Log.d("amy", "showText: "+loginErrorMessage);
}
@OnClick(R.id.usr_btn)
public void showText(View view){
button.setText("User模块的按钮");
Log.d("amy", "showText: "+loginErrorMessage);
}
}
https://github.com/amy-nn/butterknife
Dagger
Dagger2是通过依赖注入完成类的初始化。
这个过程需要三部分:
#1 依赖提供方(生产者)
#2 依赖注入容器(桥梁)
#3 依赖需求方(消费者)
连接提供依赖和消费依赖对象的组件被称为Injector,@Inject标志被注入的对象不能为private.
Dagger捋思路
1.TestActivity类中的mPresent对象需要被注入,所以在mPresent对象上添加了@Inject,同时在TestPresent类的构造方法添加@inject
2.创建TestPresent对象时需要参数IView类型的对象,所以需要通过依赖获取这些对象,就有了@Module注释
3.@Module注解对过@provides注解的以provide开头的方法对外提供需要的参数,一般情况下有几个参数就有几个带@provides的方法
4.这时候就需要一个桥梁将构造和参数联系在一起,@Component修饰的接口或抽象类就起到了桥梁的作用,modules属性指向需要依赖的Module类,inject方法指定在哪个类中实例化mPresent对象
5.reBuild项目后,会生成对应的Java类,通过DaggerTestComponent.builder().testModel(new TestModule(this)).build().inject(this);来完成注入。