¿Qué es la búsqueda de Netbean?
-
13-09-2020 - |
Pregunta
Tengo problemas para entender esto.Básicamente, esta API de búsqueda se utiliza para mantener la naturaleza entre módulos débilmente acoplados.Entonces, básicamente, un proveedor de servicios y un módulo consumidor pueden comunicarse entre sí utilizando la API de búsqueda, ¿correcto?
Pero lo que no entiendo es:
¿Lookup es como una bolsa llena de qué objetos para esa clase?¿Alguien puede dar una analogía más sencilla?
Entonces, se crean las dependencias y usted implementa LookupListener en el consumidor del servicio, ¿correcto?Obviamente el consumidor depende del proveedor.
Entonces, ¿qué escucha la implementación de LookupListener?¿Es su propia búsqueda?Entonces, si hay un mapa de la clase de otro módulo, ¿se almacenará como un objeto dentro de Lookup de la implementación de LookupListener?
Entonces, ¿la búsqueda es como una bolsa que puede almacenar las clases de otro módulo y sus métodos?
¿Es este el proceso correcto para determinar una selección?
- en TopComponent (vista) implementa el escucha de búsqueda y el escucha de acción.
- creas un nuevo objeto (del otro módulo)
associateLookup(Lookups.singleton(fff));
De nuevo, confusión con esta línea:qué esassociateLookup()
exactamente haciendo?result = Utilities.actionsGlobalContext().lookupResult(Browser1.class);
¿Qué hace esta línea?cual es el resultado?¿Contiene la clase Browser1 (de otro módulo)?result.addLookupListener (this)
;¿Por qué agregarías el oyente al resultado?¿Y qué estamos escuchando y por qué en TopComponent?Hecho ?
Y finalmente, para aumentar mi confusión, ¿cómo entra en juego Node API?
Solución
Otros consejos
Puedes pensar en las búsquedas como una herramienta básica que admite Principio de alta cohesión de acoplamiento flojo..
Básicamente tienes una API en beverage-api
módulo:
public interface Beverage {
...
}
Luego otro módulo beers
que depende de beverage-api
:
@ServiceProvider(service = Beverage.class)
public class SomeBeer implements Beverage {
...
}
en otro módulo que también depende de beverage-api
puedes escribir una fórmula mágica:
Collection list = Lookup.getDefault().lookupAll(Beverage.class);
lo que le brindará una lista de todos los proveedores de bebidas sin declarar una dependencia exacta de la clase específica o tener dependencia de ese módulo.Esto es genial, su código no depende de una implementación específica, es suficiente tener estos módulos en la ruta de clases y se cargarán "automágicamente" en su aplicación.
associateLookup(Lookups.singleton(fff));
De nuevo, confusión con esta línea:¿Qué está haciendo exactamente AssociateLookup()?
Sí, eso es confuso.Básicamente, estás agregando manualmente algún objeto al sistema de búsqueda.
result = Utilities.actionsGlobalContext().lookupResult(Beverage.class);
Utilities.actionsGlobalContext()
está relacionado con el seleccionado actualmente (activo) TopCompoment
.Devolverá una instancia de Beverage.class
si existe en el componente activo.Si desea todas las instancias de una clase determinada, debe usar lookupAll()
.
result.addLookupListener(this);
¿Por qué agregarías el oyente al resultado?
Para recibir notificaciones sobre cambios.Cuando el usuario selecciona algunos Beverages
objetos que desencadena LookupListener
método:
void resultChanged(LookupEvent ev);
y result.allInstances();
devolverá qué instancias fueron seleccionadas.