1. コンセプト
JDK の組み込みサービス検出メカニズム。 SPI は動的な置換および検出メカニズムです。たとえば、インターフェイスがあります。実行時に動的に追加したい場合は、実装を追加するだけです。 java.sql.Driver インターフェースはよく目にしますが、異なるベンダーが同じインターフェースの異なる実装を実装する可能性があります。 mysql と postgresql はユーザーに異なる実装を提供し、Java の SPI メカニズムは特定のインターフェイスのサービスを見つけることができます。
2.例
public class KryoSerializer implements ObjectSerializer { @Override public byte[] serialize(Object obj) throws ObjectSerializerException { byte[] bytes; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { //获取kryo对象 Kryo kryo = new Kryo(); Output output = new Output(outputStream); kryo.writeObject(output, obj); bytes = output.toBytes(); output.flush(); } catch (Exception ex) { throw new ObjectSerializerException("kryo serialize error" + ex.getMessage()); } finally { try { outputStream.flush(); outputStream.close(); } catch (IOException e) { } } return bytes; } @Override public <T> T deSerialize(byte[] param, Class<T> clazz) throws ObjectSerializerException { T object; try (ByteArrayInputStream inputStream = new ByteArrayInputStream(param)) { Kryo kryo = new Kryo(); Input input = new Input(inputStream); object = kryo.readObject(input, clazz); input.close(); } catch (Exception e) { throw new ObjectSerializerException("kryo deSerialize error" + e.getMessage()); } return object; } @Override public String getSchemeName() { return "kryoSerializer"; } }
以上がJavaのSPIとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。