org.projectforge.plugins.core.AbstractPlugin (ServiceLoader)IHKPlugin como una implementación de org.projectforge.plugins.core.AbstractPlugin. Este archivo de una sola línea es el mecanismo mediante el cual el plugin IHK se descubre y carga en tiempo de ejecución.org.projectforge.plugins.ihk.IHKPlugin
Este archivo se encuentra en la ruta estándar de Java ServiceLoader META-INF/services/{nombre-de-interfaz-completamente-cualificado}. Cuando el escáner de plugins de ProjectForge invoca ServiceLoader.load(AbstractPlugin.class), la JVM lee todos los archivos de este tipo desde el classpath, instancia cada clase listada y llama a initialize() en cada instancia de plugin.
PFPluginService (o el escáner de plugins equivalente) llama a ServiceLoader.load(AbstractPlugin.class).META-INF/services/org.projectforge.plugins.core.AbstractPlugin en cada JAR de plugin o entrada de classpath.AbstractPlugin registra los metadatos del plugin (ID, nombre, descripción).initialize(), donde IHKPlugin realiza sus registros de DAO, web, menú, derechos e i18n.java.util.ServiceLoader en lugar del escaneo con @Component de Spring para el descubrimiento de plugins. Esto permite cargar plugins desde JARs externos colocados en un directorio de plugins, independientemente de los paquetes base de escaneo de componentes de Spring.IHKPlugin.IHKPlugin en sí mismo no es un bean de Spring, los componentes que conecta (a través de WicketSupport.get()) son gestionados por Spring. Este enfoque híbrido mantiene el ciclo de vida del plugin separado del ciclo de vida del contexto de Spring.org.projectforge.plugins.todo.ToDoPlugin (ver #287), el plugin Memo tiene org.projectforge.plugins.memo.MemoPlugin, etc.50d5d8926 wip: META-INF/services necesarios para plugins (Service loader) 07b80966b wip: PFPluginService (PluginConfig) -> PluginInfo 45cad02e9 Plugin IHK añadido (Reemplazará el plugin "Ihk-Export")