I have a interface like this :
@Singleton
public interface StorageEngine {
String upload(InputStream inputStream);
InputStream download(String fileName);
int size(String fileName);
boolean delete(String fileName);
}
and multiple implementation :
public class LocalFileSystemEngine implements StorageEngine {
// Implement methods ...
}
public class DropboxEngine implements StorageEngine {
// Implement methods ...
}
public class GoogleDriveEngine implements StorageEngine {
// Implement methods ...
}
and this Producer class :
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Any;
import jakarta.enterprise.inject.Instance;
import jakarta.enterprise.inject.Produces;
import jakarta.inject.Inject;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ApplicationScoped
public class StorageProducer {
private static final Logger logger = LoggerFactory.getLogger(StorageProducer.class);
@Inject
@ConfigProperty(name = "storage.engine-type",defaultValue = "local-filesystem")
private String engineType;
@Inject
@Any
private Instance<StorageEngine> storageEngineInstance;
@Produces
public StorageEngine getStorageEngine() {
// How to implement ???
}
}
my goal is :
read engine type from microprofile properties file and produce storage engine .
Is there any way to inject StorageEngine without qualifier annotation ?
I need to have only this on injection point class:
@MultipartConfig
@WebServlet(urlPatterns = "/file")
public class FileServlet extends HttpServlet {
@Inject
private StorageEngine storageEngine;
// Implement service method
}
anyone can help me ?