Uhm...forse mi sfugge qualcosa dei vincoli che hai e del contesto in cui lavori, ma se l'obiettivo è ottenere che il tuo bean "service" si comporti in modi diversi a seconda di una discriminante su db non mi sembra un approccio molto pulito.Magari funziona ma stai forzando le cose. A questo punto, se ho capito bene e se non ci sono altri impedimenti (che non avendo il quadro completo non posso conoscere) io passerei al bean service le reference di entrambi i bean policy , evitando il subclassing (che in questo caso non ti serve come dimostra il fatto che poi fai un test sulle istanze) e sulla base di un flag letto da db chiamerei policy1.metodo() piuttosto che policy2.metodo() a seconda del valore del flag.

Originariamente inviato da iperuber
si, infatti quello che sto facendo è, dopo un refactoring delle classi, avere qualcosa del tipo:

AbstractClassePadre {
public metodo(){
valore = repositoryConfig.readActualPropertyFromDB(...);
if (valore instanceof A) {
A a = getApplContext.getBean("policy_1");
a.metodo();
} else if (valore instanceof B) {
B b = getApplContext.getBean("policy_2");
b.metodo();
}
}

class A extends AbstractClassePadre {
@override
metodo(){...};
}

class B extends AbstractClassePadre {
@override
metodo(){...};
}


come la vedi?