Slide 1

Slide 1 text

"TZODISPOPVT*OKFDUJPO JEGVOOFMCJU

Slide 2

Slide 2 text

ࣗݾ঺հ ๺ଜྋ )BUFOBGVOOFMCJU 5XJUUFS!FYQFSPQFSP

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

"OESPJE Ͱ ඇಉظ ʹ ґଘղܾ͢Δ࿩

Slide 5

Slide 5 text

%BHHFS 1SPEVDFST w ඇಉظͰґଘղܾ͢Δ࢓૊ΈΛఏڙ

Slide 6

Slide 6 text

؆୯ͳྫ w .PEVMFº w $PNQPOFOU w "DUJWJUZ

Slide 7

Slide 7 text

.PEVMF @ProducerModule
 final class AppProducerModule {
 @Produces
 ListenableFuture getUserData() {
 // ~ ͳΜ͔ΊͬͪΌ͕͔͔࣌ؒΔॲཧ ~
 return Futures.immediateFuture(new UserData("userName"));
 }
 
 @Produces
 String userName(UserData userData) { return userData.name; // Activity ͸͜Ε͕΄͍͠
 }

Slide 8

Slide 8 text

.PEVMF @ProducerModule
 final class AppProducerModule {
 @Produces
 ListenableFuture getUserData() { // 1
 // ~ ͳΜ͔ΊͬͪΌ͕͔͔࣌ؒΔॲཧ ~
 return Futures.immediateFuture(new UserData("userName"));
 }
 
 @Produces
 String userName(UserData userData) { // 2 return userData.name; // Activity ͸͜Ε͕΄͍͠
 }

Slide 9

Slide 9 text

.PEVMF @Module
 public class ExecutorModule {
 @Provides
 @Production
 static Executor executor() {
 return Executors.newCachedThreadPool();
 }
 }

Slide 10

Slide 10 text

$PNQPOFOU @ProductionComponent(modules = { ExecutorModule.class, AppProducerModule.class})
 public interface AppProducerComponent {
 ListenableFuture userName();
 }

Slide 11

Slide 11 text

"DUJWJUZ … ListenableFuture userDataListenableFuture = DaggerAppProducerComponent.create().userName();
 Futures.addCallback( userDataListenableFuture, new FutureCallback() {
 @Override
 public void onSuccess(String result) {
 Log.e("name", result);
 }
 
 @Override
 public void onFailure(Throwable t) {
 Log.e("failure", t.toString());
 }
 }); …

Slide 12

Slide 12 text

1SPEVDFS5

Slide 13

Slide 13 text

.PEVMF @ProducerModule
 public class AppProducerLazyModule {
 @Produces @Normal
 ListenableFuture provideNUserData() {
 return Futures.immediateFuture(new UserData("normal"));
 }
 
 @Produces @Special
 ListenableFuture provideSUserData() {
 return Futures.immediateFuture(new UserData("special"));
 } 
 @Produces
 ListenableFuture provideUserData( @Normal Producer nProducer, @Special Producer sProducer) {
 return sProducer.get();
 }
 }

Slide 16

Slide 16 text

1SPEVDFE5

Slide 17

Slide 17 text

.PEVMF @ProducerModule
 final class AppProducerModule {
 @Produces
 ListenableFuture getUserData() {
 // ~ ͳΜ͔ΊͬͪΌ͕͔͔࣌ؒΔॲཧ ~
 throw new IllegalStateException(); // Θ͟ͱམͱ͢
 }
 
 @Produces
 String userName(Produced userData) {
 try {
 return userData.get().name;
 } catch (ExecutionException e) {
 e.printStackTrace();
 return "Կ͔͕ى͖ͨ";
 }
 }
 }

Slide 18

Slide 18 text

ৄࡉ w IUUQHPPHMFHJUIVCJPEBHHFSQSPEVDFST

Slide 19

Slide 19 text

͋Γ͕ͱ͏͍͟͝·ͨ͠