[JVM]の研究では、ServiceLoaderクラスノート

新しいプロジェクト、導入MySQLの依存関係をMavenの、次のコードを実行します。

パブリック クラスのテスト{
     公共 静的 ボイドメイン(文字列[]引数){ 
        ServiceLoader <ドライバ>ローダ= ServiceLoader.load(ドライバ。クラス)。
        反復子 <ドライバ>イテレータ= loader.iterator()。
        一方、(iterator.hasNext()){ 
            ドライバドライバ = iterator.next()。
            System.out.println( "ドライバ"+ driver.getClass()+"、ローダ:" + 。driver.getClass()のgetClassLoader())。
        } 

        のSystem.out.println( "当前线程上下文类加载器:" + 。にThread.currentThread()getContextClassLoader())。
        するSystem.out.println( "ServiceLoader的累加载器:"クラス.getClassLoader()); 
    } 
}

業績

ドライバ:sun.jdbc.odbc.JdbcOdbcDriverクラス、ローダー:nullの
ドライバ:クラスはcom.mysql.jdbc.Driver、ローダー:sun.misc.Launcher$AppClassLoader@1c898b41 
現在のスレッドのコンテキストクラスローダ:sun.misc.Launcher $ AppClassLoader 1c898b41 @ 
ServiceLoader疲れローダー:ヌル

ServiceLoaderコードとドライバーなぜServiceLoader <ドライバー>ローダー= ServiceLoader.load(Driver.class)、JDKクラスが付属している。やるドライバをロードするMySQLができますか?

これは、実際にSPI仕様で、MySQLのドライバをロードするために、ドキュメントのドキュメントServiceLoaderクラス内の特定の命令がありますが、本当に仕様は、以下のパッケージのパスに巻き込まMETA-INF /サービスの瓶を提出しなければならない、サードパーティの実装を必要としていますjava.sql.driverという名前のテキストファイルの内容は、ファイル名は瓶がたくさんこのタイプのサービスを実現含まれていることを示す、サーバインタフェースの名前で、テキストファイルの内容ははcom.mysql.jdbc.Driverあり、その実装クラスを示してい完全修飾名。

おすすめ

転載: www.cnblogs.com/heben/p/11456580.html