2012-07-17 9 views
7

Tengo un grano de primavera que se extiende HibernateDaoSupport. Quiero inyectar este bean en mis Controladores, pero NO quiero que implemente ninguna interfaz. Solo quiero referirme a la clase concreta dentro del resto de mi código (¿no usar el AopProxy tal vez?) ¿Alguien tiene alguna forma de hacerlo?Quiero definir una clase de Spring Bean sin interfaz

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

@Autowired 
private MySampleService mySampleService; 

... getters and setters .... 

sé que es una buena idea utilizar la interfaz y que es el punto central de la COI, pero por favor no sugieren que uso la interfaz.

+0

¿Cuál es el problema? – axtavt

+0

¿Qué está forzando actualmente a usar una interfaz? –

+0

Buen punto axtavt (y Adam) - Da una java.lang.ClassNotFoundException: MySampleService, pero la clase está absolutamente allí. Solo comencé a dar eso cuando eliminé la "MySampleInterface" correspondiente de mi proyecto ... – fandang

Respuesta

10

Si la clase que se aproxima (por poder transaccional en su caso) implementa cualquier interfaz (InitializingBean implementadas por HibernateDaoSupport en su caso), Primavera de manera predeterminada utiliza la estrategia de proxy basado en proxies dinámicos de JDK.

Por lo tanto, crea un proxy de tipo InitializingBean, que, obviamente, no se puede inyectar en un campo de tipo MySampleService.

Si no desea utilizar la interfaz, puede anular la estrategia utilizada por aspecto transaccional declarando <tx:annotation-driven> con proxy-target-class = "true".

Consulte también:

+2

también, no hagas que la clase concreta sea definitiva, o no podrás proxy de esta manera. – Matt

+1

axtavt Gracias, funcionó :) el bean está ahora allí y no es nulo, exactamente lo que quería, nunca habría descubierto ese atributo tx: anotación ¡así que gracias de nuevo! – fandang

+0

y asegúrese de que tiene un constructor vacío como lo menciona Alf [aquí] (http://stackoverflow.com/questions/8922135/why-always-have-single-implementaion-interfaces-in-service-and-dao-layers) –

0

puede escribir todo lo que incluye el controlador asignada en el XML como frijoles, entonces no es necesario escribir interfaces. de lo contrario, con el uso de la anotación necesita construir interfaces para proxy.

Cuestiones relacionadas