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 esos archivos del classpath, instancia cada clase listada y llama a initialize() en cada instancia del 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 del 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 de @Component de Spring para el descubrimiento de plugins. Esto permite que los plugins se carguen 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 necesario para plugins (cargador de servicios) 07b80966b wip: PFPluginService (PluginConfig) -> PluginInfo 45cad02e9 Plugin IHK añadido (reemplazará al plugin "Ihk-Export")