All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.devsurf.injection.guice.serviceloader.MultiServiceLoaderProvider Maven / Gradle / Ivy

The newest version!
package de.devsurf.injection.guice.serviceloader;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.ServiceLoader;

import com.google.inject.Inject;
import com.google.inject.Provider;

public final class MultiServiceLoaderProvider implements Provider {

	private final Class type;

	@Inject
	com.google.inject.Injector injector;

	public MultiServiceLoaderProvider(Class type) {
		this.type = type;
	}

	/*
	 * Generated classes can't be used with AOP, because only instances created
	 * by Guice are extended with AOP. Maybe this will be fixed later in Guice.
	 * @see com.google.inject.Provider#get()
	 */
	@SuppressWarnings( { "unchecked" })
	@Override
	public T[] get() {
		List instances = new ArrayList();
		ServiceLoader services = ServiceLoader.load(type);
		
		for(T t : services){
			injector.injectMembers(t);
			instances.add(t);
		}
		
		return instances.toArray((T[]) Array.newInstance(type, instances.size()));
	}

	public static  Provider of(Class type) {
		return new MultiServiceLoaderProvider(type);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy