JAVAでのSPIメカニズム

以前の研究は非常に好奇心の時間をダボ、様々な拡張機構の内部に、メカニズムは、今日中にSPIについて多くを読んで、もう一度記事の要約、これについての記録を見ることが運命

SPIでのJAVAの最も簡単な使用ではまず見て

この記事を参照してもよい、https://mp.weixin.qq.com/s/vpy5DJ-hhn0iOyp747oL5A

シナリオ

SPI拡張メカニズムは、このような共通のロギングなど多くのシナリオがある、JDBC、ダボが好きです。

SPIプロセス:

  1. 式で定義される関係機関とのインターフェース規格 

  2. サードパーティが具現化:具体的な方法を達成するために、構成のMETA-INF /サービス/ $ {interface_nameに}ファイル 

  3. 開発者の使用

例えば、JDBC次のシーン:

  • 最初のJavaインターフェースに、java.sql.driverで定義され、特定の実装の具体的な実装は、異なるベンダーによって提供されていません。

  • MySQLでは、JARパッケージのmysql-コネクタのjava-6.0.6.jarは、META-INF / servicesディレクトリ見つけることができ、ディレクトリ内に、java.sql.driverファイルの名前があるだろう、ファイルの内容がcom.mysqlです。 cj.jdbc.Driverは、コンテンツは、Java用に定義されたインタフェースの実装であります。

  • これは、JavaのPostgreSQLのに、java.sql.driverの実現である、org.postgresql.Driverであるとしても、瓶の中のPostgreSQL PostgreSQLの-42.0.0.jarも、同じコンフィギュレーション・ファイルを見つけることができます。

不十分な

1.オンデマンドでロードすることはできません、あなたはすべての実装を横断して、インスタンス化し、その後、私たちはループ内で検索する必要があることを認識する必要があります。あなたが特定のクラスを達成したい、または特定のクラスのインスタンス化に時間がかかりれない場合は、また、廃棄物をもたらした、ロードおよびインスタンス化することができます。

2.実装クラスは柔軟ではない、それだけでいくつかのパラメータに基づいて、対応する実装クラスを取得するのではなく、イテレータのフォームを介して取得することができます取得します。

3.複数の同時マルチスレッド利用クラスServiceLoaderのインスタンスは危険です。

どのように避けるために、

上記の欠点ポイント、我々SPI選択メカニズムについては、SPI機構ダボが達成使用することを検討してください。

 

特定の参照: 

http://dubbo.apache.org/zh-cn/blog/introduction-to-dubbo-spi.html

 

おすすめ

転載: www.cnblogs.com/quyf/p/11531531.html