2012-07-17 5 views
7

Ho un bean spring che si estende HibernateDaoSupport. Voglio che questo bean venga iniettato nei miei controller, ma NON voglio che implementi alcuna interfaccia. Voglio solo fare riferimento alla classe concreta dal resto del mio codice (non usare forse l'AopProxy?) Qualcuno ha un modo per farlo?Voglio definire un CLASSE Spring Bean senza interfaccia

<bean id="mySampleService" class="com.sample.MySampleService"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

@Autowired 
private MySampleService mySampleService; 

... getters and setters .... 

so che è una buona idea di utilizzare l'interfaccia e questo è il punto centrale di CIO, ma per favore non suggeriscono che uso l'interfaccia.

+0

Qual è il problema? – axtavt

+0

Cosa ti costringe attualmente a utilizzare un'interfaccia? –

+0

Good point axtavt (e Adam) - Fornisce una java.lang.ClassNotFoundException: MySampleService, ma la classe è assolutamente presente. Ha iniziato a darlo solo quando ho rimosso il corrispondente "MySampleInterface" dal mio progetto ... – fandang

risposta

10

Se classe da proxy (per delega transazionale nel tuo caso) implementa qualsiasi interfaccia (InitializingBean attuate dalle HibernateDaoSupport nel tuo caso), Primavera di default usa la strategia basata su proxy proxy dinamici JDK.

Quindi, crea un proxy di tipo InitializingBean, che, ovviamente, non può essere iniettato in un campo di tipo MySampleService.

Se non si desidera utilizzare l'interfaccia, è possibile ignorare la strategia utilizzata dall'aspetto transazionale dichiarando <tx:annotation-driven> con proxy-target-class = "true".

Consulta anche:

+2

Inoltre, non rendere la finale di classe concreta, o non sarai in grado di proxy in questo modo. – Matt

+1

axtavt Grazie, ha funzionato :) il bean ora è lì e non null, esattamente quello che volevo, non avrei mai capito che tx: attributo di annotazione quindi grazie ancora! – fandang

+0

e assicurati che abbia un costruttore vuoto come menzionato da Alf [qui] (http://stackoverflow.com/questions/8922135/why-always-have-single-implementaion-interfaces-in-service-and-dao-layers) –

0

si può scrivere tutto compreso il controllore mappato in XML come fagioli, allora non c'è bisogno di scrivere interfacce. altrimenti, con l'uso dell'annotazione, è necessario creare interfacce per il proxy.