1

構成ファイルでクラスを指定できる方法と、コンストラクターに渡す必要があるパラメーターを見つけようとしています。

たとえば、次の 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 構成ファイルの値を含むコメントで上記の行をエミュレートする方法がわかりません (置き換えたい...)。このようなことをする方法はありますか?

4

1 に答える 1

0

構成ファイルを解析して、使用するクラスの名前を取得し、 を使用してコンストラクターに渡しますClass.forName("com.mydomain.server.auth.DefaultAuthenticator")。追加情報を渡したい場合は、追加の引数またはプロパティ オブジェクトなどを使用します。

より興味深い用途については、この同様の質問を参照してください

編集

これはあなたが探しているものですか?

new DefaultAuthenticator(Class.forName("com.mydomain.server.auth.DefaultAuthenticator").newInstance());

Class.forName は、引数のないデフォルト コンストラクターのみを呼び出します。引数を指定する必要がある場合は、リフレクションを使用してコンストラクターからオブジェクトを作成するための Java チュートリアルに従ってリフレクションを使用できます。ただし、デフォルトのコンストラクターを使用してインスタンスを作成し、セッターを使用して必要に応じて構成することは完全に可能です (そしておそらく読みやすくなります)。

于 2013-02-20T02:09:29.797 に答える