我试图找到一种可以在配置文件中指定类的方法,以及应该传递给构造函数的参数。
例如,假设以下XML配置文件:
<AuthServer>
<Authenticator type="com.mydomain.server.auth.DefaultAuthenticator">
<Param type="com.mydomain.database.Database" />
</Authenticator>
</AuthServer>
现在,在我的Java代码中,我想要执行以下操作:
public class AuthServer {
protected IAuthenticator authenticator;
public AuthServer(IAuthenticator authenticator) {
this.authenticator = authenticator;
}
public int authenticate(String username, String password) {
return authenticator.authenticator(username, password);
}
public static void main(String[] args) throws Exception {
//Read XML configuration here.
AuthServer authServer = new AuthServer(
new DefaultAuthenticator(new Database()) //Want to replace this line with what comes from the configuration file.
);
}
}
我当然可以阅读XML,并从中获取值,但是我不确定如何使用XML中的值来模拟上面指出的行(想要替换...)配置文件。有没有办法做这样的事情?
答案 0 :(得分:0)
解析配置文件以获取要使用的类的名称,并使用Class.forName("com.mydomain.server.auth.DefaultAuthenticator")
将其传递给构造函数。如果要传递其他信息,请使用更多参数或属性对象或类似信息。
查看更多interesting uses
的类似问题修改强>
这是你在找什么?
new DefaultAuthenticator(Class.forName("com.mydomain.server.auth.DefaultAuthenticator").newInstance());
Class.forName只会调用无参数的默认构造函数。如果需要提供参数,可以根据creating objects from constructors using reflection的Java教程使用反射。但是,完全可能(并且可能更容易阅读)使用默认构造函数创建实例,然后使用setter根据需要进行配置。