Estoy aprendiendo Java y encuentro algunos problemas. Aquí tenemos patrón de la fábrica simple:Registro de fábrica automático
public class SomeFactory {
...
public static void registerProduct(String name, Class<? extends IProduct > f)
}
public SomeProduct implements IProduct {
static {
SomeFactory.register("some product", SomeProduct.class);
}
...
}
Todos los productos deben inscribirse en la fábrica.
Pero antes de usar este código, todas las clases de productos deben cargarse. Puedo poner Class.forName()
en alguna parte, por ejemplo en la función principal. Pero quiero evitar ese tipo de carga manual de clases. Solo quiero agregar nuevas implementaciones IProduct
, sin actualizar otras partes (como los métodos SomeFactory
o Main
, etc.). Pero me pregunto, ¿es posible cargar algunas clases automáticamente (marcadas con una anotación, por ejemplo)?
P.S Quiero notar que no se agregarán otras clases en el tiempo de ejecución, todas las implementaciones de IProduct
son conocidas antes de la compilación.
UPD # 1 Gracias por su respuesta! ¿Pero es posible crear automáticamente un archivo de propiedades con IProduct
instancias? Quiero decir, ¿es posible crear algún script de compilación (para maven, por ejemplo) que genere código de propiedad o código de cargador? ¿Hay tales soluciones o marcos?
UPD # 2 he terminado con el uso de Reflections library que proporciona información en tiempo de ejecución, mediante el escaneo de ruta de clase en el arranque.
Cómo es 'this.getClass()' va a trabajar en '' estática {} ... O_O? –