2017-12-13 3 views
0

私は、拡張可能なアプリケーションの作成に取り組んでいます。 ServiceLoaderユーティリティクラスについてのドキュメントを読むクラスローダーとサービスローダー。どのクラスローダーが使われていますか?

は、私は次の文を理解することができませんでした:

プロバイダが最初にコンフィギュレーションファイルを検索するために照会された同じクラスローダからアクセス可能でなければなりませんが。これは必ずしもファイルが実際にロードされたクラスローダである必要はありません。

誰でも私に説明することができますか?

構成ファイルの場所を特定するために使用するクラスローダーは、どのように決定できますか?

答えて

2

誰でも私に何を説明できますか?

ClassLoadersは委任を行うことができるという事実を指していると思います。私は、設定ファイルを見つけるために、たとえば、

MyClass.class.getClassLoader().getResource("/services/org/my/Service"); 

を実行する場合、それはされないように、それは親ClassLoader、そしてその親などに多分その1へのClassLoaderMyClassのための代表者かもしれClassLoader実際に設定ファイルを読み込む(MyClass.class.getClassLoader())の質問を受けました。その場合

、仕様は名前がMyClass.class.getClassLoader()からアクセス可能である必要があり、実際にClassLoaderは、設定ファイルを探しに関係なく、サービスクラス、それがいることを言います。私はここで自分たちの代表団を排除しないように "アクセス可能"にしています。

実際には、例えば、JavaEEコンテナにあるように、ClassLoadersのチェーンを上に単純な委任よりも面白い戦略に従う実装が、おそらくより顕著になります。

構成ファイルの場所を特定するためにどのクラスローダーを使用すればよいですか。

一般的に言えば、おそらくそうする必要はありません。任意のサービス構成ファイルによって指定されたサービスクラスがすべてconfigファイル自体と同じ(すべて)同じClassLoaderを介してアクセスできるようにすることをお勧めします。それらを同じjarに入れることは、これを達成するはずです。

関連する問題