Quindi, per questo progetto sto cercando di estendere una classe in fase di esecuzione. Quello che mi piacerebbe sapere, è anche possibile? Se sì, come lo farei? Ci sono biblioteche là fuori per queste cose?Estendere classe in fase di esecuzione
risposta
CGLib è una libreria che stai cercando. È piuttosto potente nell'estendere le classi o nell'implementare interfacce in runtime, quindi molti framework popolari, come Spring o Hibernate, lo usano.
È possibile creare un'estensione classe con il codice come
public Object createProxy(Class targetClass) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(NoOp.INSTANCE);
return enhancer.create();
}
anche se si sarebbe probabilmente sostituire NoOp
callback con un metodo utile intercettore con la logica desiderata.
Fantastico, grazie! – PaulBGD
La risposta dipende da cosa si intende con "estendere una classe". In java "estendere" significa dichiarare un'altra classe che estende la prima (è una sottoclasse). Quindi, se si desidera creare una sottoclasse di una data classe, ciò è possibile - basta preparare un array di byte che rappresenta la sottoclasse e passarlo a un programma di caricamento classi.
Se si desidera aggiungere campi o metodi a una classe esistente, ciò è possibile solo nel momento in cui questa classe viene caricata e viene eseguita sostituendo la rappresentazione di matrice di byte. Se la classe è già stata caricata, non è possibile modificarla in alcun modo.
Stavo solo cercando di scegliere quale classe estendere (dato che il classpath della classe cambia costantemente). – PaulBGD
Perché mai vorresti farlo? Si prega di chiarire il caso d'uso. Dubito che sia possibile. –