Package com.netflix.governator.guice.serviceloader

Source Code of com.netflix.governator.guice.serviceloader.ServiceLoaderTest$BoundServiceImpl

package com.netflix.governator.guice.serviceloader;

import java.util.Set;

import javax.inject.Inject;

import junit.framework.Assert;

import org.testng.annotations.Test;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Names;
import com.google.inject.util.Types;
import com.netflix.governator.guice.LifecycleInjector;
import com.netflix.governator.guice.LifecycleInjectorBuilder;

public class ServiceLoaderTest {
    public static class BoundServiceImpl implements TestService {
        private Boolean injected;

        @Inject
        public BoundServiceImpl(Boolean injected) {
            this.injected = injected;
        }
       
        @Override
        public boolean isInjected() {
            return injected;
        }
    }
   
    @Test
    public void testMultibindings() {
        Injector injector = Guice.createInjector(new ServiceLoaderModule() {
            @Override
            protected void configureServices() {
                bind(Boolean.class).toInstance(true);
                Multibinder
                    .newSetBinder(binder(), TestService.class)
                    .addBinding()
                    .to(BoundServiceImpl.class);
                bindServices(TestService.class)
                    .usingMultibinding(true);
            }
        });
       
        Set<TestService> services = (Set<TestService>) injector.getInstance(Key.get(Types.setOf(TestService.class)));
        Assert.assertEquals(2, services.size());
        for (TestService service : services) {
            Assert.assertTrue(service.isInjected());
            System.out.println("   " + service.getClass().getName());
        }
    }
   
    @Test
    public void testNoMultibindings() {
        Injector injector = Guice.createInjector(new ServiceLoaderModule() {
            @Override
            protected void configureServices() {
                bind(Boolean.class).toInstance(true);
                bindServices(TestService.class);
            }
        });
       
        Set<TestService> services = (Set<TestService>) injector.getInstance(Key.get(Types.setOf(TestService.class)));
        Assert.assertEquals(1, services.size());
        for (TestService service : services) {
            Assert.assertTrue(service.isInjected());
            System.out.println("   " + service.getClass().getName());
        }
    }
   
    @Test
    public void testServiceLoadedModules() {
        LifecycleInjectorBuilder builder = LifecycleInjector.builder();
        builder.withAdditionalBootstrapModules(new ServiceLoaderBootstrapModule());
       
        Injector injector = builder.build().createInjector();
        Assert.assertEquals("loaded",  injector.getInstance(Key.get(String.class, Names.named(MyServiceLoadedModule.class.getSimpleName()))));
    }
}
TOP

Related Classes of com.netflix.governator.guice.serviceloader.ServiceLoaderTest$BoundServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.