其他分享
首页 > 其他分享> > Dagger2集成之数据依赖注入

Dagger2集成之数据依赖注入

作者:互联网

熟悉其他DI框架的同学应该知道,其实日常开发过程中,除了对象实例的依赖注入,有时还会遇到一些基本数据的依赖注入,本篇将介绍Dagger2在Android开发过程中如何进行基本数据的依赖注入。

我们直接进入主题,上代码:

package com.tc.app.dagger2.di;
​
import android.util.Log;
​
import javax.inject.Inject;
​
/**
 * 真实的业务处理服务
 *
 * @author min.weixm
 * @version $Id: MyBusinessApiService.java, v 0.1 2021/11/12 14:35 min.weixm Exp $
 */
public class MyBusinessApiService {
​
   @Inject
   String property;
​
   @Inject
   public MyBusinessApiService() {
   }
​
   public void register() {
      Log.i("----------------------------MyBusinessApiService--------------------", "MyBusinessApiService " + property);
   }
}

注:从上面代码可以看到,在MyBusinessApiService中,有个String类型的property属性,需要进行动态注入一个特定值。我们通过在register()打印日志的方式来检查property属性的注入过程是否成功。

接下来,我们开始为property属性进行设置:

package com.tc.app.dagger2.di;
​
import dagger.Module;
import dagger.Provides;
​
/**
 * 在这里对实际进行业务处理的组件进行实例化(如,对MyBusinessApiService进行实例化处理)
 *
 * @author min.weixm
 * @version $Id: MyBusinessApartModule.java, v 0.1 2021/11/12 14:38 min.weixm Exp $
 */
@Module
public class MyBusinessApartModule {
​
   @Provides
   public String property(){
      return "http://www.baidu.com";
   }
}

不失完整性,我们继续贴出Component和Activity的集成代码:

Component代码:

package com.tc.app.dagger2.di;
​
import com.tc.app.dagger2.MainActivity;
​
import dagger.Component;
​
/**
 * 不真正提供实例,真实实例由 MyBusinessApartModule 提供
 *
 * @author min.weixm
 * @version $Id: MyApartComponent.java, v 0.1 2021/11/12 14:40 min.weixm Exp $
 */
@Component(modules = {MyBusinessApartModule.class})
public interface MyApartComponent {
​
   void inject(MainActivity activity);
}

Activity的集成代码:

package com.tc.app.dagger2;
​
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
​
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
​
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.tc.app.dagger2.di.DaggerMyApartComponent;
import com.tc.app.dagger2.di.MyBusinessApiService;
​
import javax.inject.Inject;
​
public class MainActivity extends AppCompatActivity {
​
   /** 通过依赖注入的业务服务实例 */
   @Inject
   MyBusinessApiService myBusinessApiService;
​
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      this.setContentView(R.layout.activity_main);
      Toolbar toolbar = findViewById(R.id.toolbar);
      setSupportActionBar(toolbar);
​
      FloatingActionButton fab = findViewById(R.id.fab);
      fab.setOnClickListener((view) ->
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                  .setAction("Action", null).show()
      );
​
      //初始化环境,并完成功能调用
      DaggerMyApartComponent.create().inject(this);
      this.myBusinessApiService.register();
   }
​
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
​
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      int id = item.getItemId();
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}

运行结果日志:

I/----------------------------MyBusinessApiService--------------------: MyBusinessApiService http://www.baidu.com

如果运行后,看到如上的日志记录,那么恭喜你,说明本次数据注入已经成功!

标签:集成,依赖,app,dagger2,Dagger2,MyBusinessApiService,import,com,public
来源: https://blog.csdn.net/qq_30114557/article/details/121314684