Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Dagger使用提供了vs创建自定义类_Java_Dagger 2 - Fatal编程技术网

Java Dagger使用提供了vs创建自定义类

Java Dagger使用提供了vs创建自定义类,java,dagger-2,Java,Dagger 2,我是Dagger的新手,在一些Dagger项目中,我遇到了@Provides的替代方案,这让我思考这两种方法之间是否有实际的区别 通用代码: class DependencyOne { @Inject DependencyOne(); } class DependencyTwo { @Inject DependencyTwo(); } 方法1: class MyClass { Resource r; @Inject MyClass(DependencyOne

我是Dagger的新手,在一些Dagger项目中,我遇到了@Provides的替代方案,这让我思考这两种方法之间是否有实际的区别

通用代码:

class DependencyOne {
    @Inject DependencyOne();
}

class DependencyTwo {
    @Inject DependencyTwo();
}
方法1:

class MyClass {
    Resource r;

    @Inject MyClass(DependencyOne d1, DependencyTwo d2) {
        r = Resource.builder().addDependencies(d1,d2).build();
    }

    Resource getResource() {
        return r;
    }
}

@Component interface MyComponent {
    MyClass getMyClass();
}

// Get the resource using
DaggerMyComponent.create().getMyClass().getResource();
方法2:

@Module class MyModule {
    @Provides static Resource getResource(DependencyOne d1, DependencyTwo d2) {
        return Resource.builder().addDependencies(d1,d2).build();   
    }
}

@Component(modules={MyModule.class})
interface MyComponent {
    Resource getResource();
}

// Get the resource using
DaggerMyComponent.create().getResource();

现在我知道我可能想得太多了,但这两种方法,性能或其他方面,有什么实际的区别吗?其中一种方法优于另一种方法吗?

@提供了方法,构造函数注入是Dagger 2的最佳实践。直接调用组件并请求像
资源那样的独立依赖项可能会被最小化

假设您有一个类,希望能够使用
资源
。编写
@为
资源提供
方法。然后您可以编写这样的类:

@Inject
class ResourceConsumer {

    private final Resource resource;

    @Inject
    ResourceConsumer(Resource resource) {
        this.resource = resource;
    }
}  

因为Dagger 2知道如何提供
资源
,所以它将知道如何提供
资源消费者
。然后您可以将
资源消费者
注入到任何您想要的地方。

@提供了
方法,构造函数注入是Dagger 2的最佳实践。直接调用组件并请求像
资源那样的独立依赖项可能会被最小化

假设您有一个类,希望能够使用
资源
。编写
@为
资源提供
方法。然后您可以编写这样的类:

@Inject
class ResourceConsumer {

    private final Resource resource;

    @Inject
    ResourceConsumer(Resource resource) {
        this.resource = resource;
    }
}  
因为Dagger 2知道如何提供
资源
,所以它将知道如何提供
资源消费者
。然后,您可以将
资源消费者
注入到任何您想要的地方