本文主要是介绍lucene4 codec反射,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Lucene4 的codec通过反射加载相应的类。
与反射相关的信息放到了lucene的jar文件的META-INF\services目录下。
相关代码在NamedSPILoader.java中
某些特殊项目需要去掉codec的反射机制,修改这个函数即可(4.5.0版本)。修改之后,不需要META-INF\services。
public synchronized void reload(ClassLoader classloader) {final LinkedHashMap<String,S> services = new LinkedHashMap<String,S>(this.services);final SPIClassIterator<S> loader = SPIClassIterator.get(clazz, classloader);if(clazz.getSimpleName().equals("PostingsFormat")) {services.put("Lucene40", (S) new Lucene40PostingsFormat());services.put("Lucene41", (S) new Lucene41PostingsFormat());}else if(clazz.getSimpleName().equals("DocValuesFormat")) {services.put("Lucene42", (S) new Lucene42DocValuesFormat());services.put("Lucene45", (S) new Lucene45DocValuesFormat());}else if(clazz.getSimpleName().equals("Codec")) {services.put("Lucene40", (S) new Lucene40Codec());services.put("Lucene41", (S) new Lucene41Codec());services.put("Lucene42", (S) new Lucene42Codec());services.put("Lucene45", (S) new Lucene45Codec());services.put("Lucene3x", (S) new Lucene3xCodec());}this.services = Collections.unmodifiableMap(services);}
这篇关于lucene4 codec反射的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!