我正在尝试使用Java 9(实际上是Java 11)创建一个具有多个提供程序的服务,在本例中为DatabaseConnection服务。
我希望能够做的(如果我完全不了解某些基本服务,请纠正我):
@DBC(engine="mssql")
)找到要实例化的类对于初学者来说,如何遍历Provider类,以便可以检查一个指示每个提供程序使用哪个引擎的注释,而无需实例化任何内容?据我所知,stream()应该返回我可以迭代并检查注解的提供者流,但是stream()。size()返回0。
第二,如何遍历实例化的提供程序? iterator()看起来应该这样做,但是根据文档,它实例化了尚未实例化的每个提供程序。
这是我的服务
public interface DatabaseConnection
{
void init(String connectionString, String internalName, String username, String password);
String getName();
String query();
}
这是我的提供者之一:
@DBC(engine="mssql")
public class MSSQLDatabaseConnection implements DatabaseConnection
{
public void init(String connectionString, String internalName, String username, String password)
{
this.internalName = internalName;
connect(connectionString, username, password);
}
public String getName()
{
return internalName;
}
public String query()
{
//Does stuff
}
public void connect()
{
return null;
}
}
这是我的模块信息:
module my.libs.database {
uses DatabaseConnection;
exports my.libs.database;
exports my.libs.database.util;
exports my.libs.database.api;
exports my.libs.database.exception;
requires java.sql;
requires com.microsoft.sqlserver.jdbc;
provides DatabaseConnection with MSSQLDatabaseConnection, TestDatabaseConnection;
}
最后,在我的主类中,我尝试获取流,但未返回任何内容:
ServiceLoader<DatabaseConnection> dbcs = ServiceLoader.load(DatabaseConnection.class);
Stream<ServiceLoader.Provider<DatabaseConnection>> test1 = dbcs.stream();
System.out.println("Found " + test1.count() + " classes");
输出Found 0 classes