30天学习笔记-day 23- Dagger (上篇)

昨天稍微讲解了Dependency Injection,今天要来介绍dagger了。

Dagger

经常使用的annotation

  1. @Inject:被标注的会提供依赖注入。
  2. @Module:标注在class上,该class会提供依赖的方法。
  3. @Component:为intereface,@Module与依赖需求方之间的桥梁。
  4. @provides:提供依赖。

Fruit.class

public class Fruit {

    private String name;
    private String price;
    
    public Fruit(String name, String price){
        this.name=name;
        this.price=price;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }
}

Module

提供Fruit需要的依赖实例。
@Named@Named("Name")将他回传的String命名为Name, 当使用provideFruit(@Named("name")String name,@Named("price")String price)需要其中的@Named("name")String name`时,就能找到对应的String。

@Module
public class Fruit1Module {
    private String name;
    private String price;

    public Fruit1Module(String name,String price){
        this.name=name;
        this.price=price;
        
    }
    //表示回传的string会传入Fruit.class
   @Provides
    Fruit provideFruit(@Named("name")String name,@Named("price")String price){
        return new Fruit(name,price);
    }
    @Provides
    @Named("name")
    String provideFruit1Name(){
        return name;
    }
    @Provides
    @Named("price")
    String provideFruit1Price(){
        return price;
    }
}

Fruit1Component

@Component(modules = Fruit1Module.class)标记要引用的Module

@Component(modules = Fruit1Module.class)
public interface Fruit1Component {
    void inject(Test1Activity test1Activity);//代表Fruit1Component注入到Test1Activity,那麽在Test1Activity可使用@inject注解变量生成实例。
}

Test1Activity

使用@Inject 注入Fruit class让Fruit被赋值。
按下build->rebuild project(快速键ctrl+f9)进行compile,编译完dagger会产生DaggerFruit1Component。使用如下:

public class Test1Activity extends AppCompatActivity {
    private Fruit1Component fruit1Component;
    @Inject 
    Fruit fruit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test1);
        setting();
    }

    private void setting() {
        fruit1Component= DaggerFruit1Component.builder() //将实体建立
                .fruit1Module(new Fruit1Module("apple","20"))
                .build();

        fruit1Component.inject(this); //将建立完的实体inject到Test1Activity
        
        String text = fruit.getName();
        Log.d("fruit",text); 
    }
}

log结果:
https://ithelp.ithome.com.tw/upload/images/20210907/20138966z51TCdEcCY.png


<<:  分布式可观测性 Tracing、Time Series Data、LSM浅谈

>>:  惨

Day24-Vuex核心概念与结构(part2)

接续前面的内容,还有几个东西没有研究到... 3. mutations 前面是学到的向仓库取资料的办...

【Day 22】 Swift 5.5 Async/await 新特性

由於今天比较晚才到家,所以可能内容会比较少一点。 另外今天在火车上看到github上面有几个开源的 ...

用 tkinter 实现选择路径打开 excel ,并用 tree view 显示

引注资料 https://blog.csdn.net/weixin_43184622/article...

【Day8】 将Function当成state传给子类别套用在事件上吧≖‿≖

相信各位看官们很熟悉各种Html的Events事件, 这篇呢~我们要透过上一篇所提到的State传入...

26.Computed vs Methods

比较下面两个用法: <!-- computed --> <div>{{ re...