Causado por: java.lang.ClassCastException: $ ProxyX no se puede convertir a my.package.DefaultCustomerProviderImpl

En mi clase de java tengo:

@Autowired
@Qualifier("customerProviderExec")
private DefaultCustomerProvider customerProvider;

Y en mi configuración de contexto XML

<bean id="customerProviderExec" class="my.package.DefaultCustomerProviderExecutor">
    <property name="defaultCustomerProviderService" ref="customerProviderImpl" />   
</bean> 

<bean id="testCustomerProviderImpl" class="my.package.DefaultCustomerProviderTest">
    <property name="customerProviderImpl" ref="customerProviderImpl" />
</bean>    

<bean id="customerProviderImpl" class="my.package.DefaultCustomerProviderImpl">
    ...
</bean>

Importante:: La clase DefaultCustomerProviderImpl implementa DefaultCustomerProvider

Cuando intento ejecutar en mi clase de Java:

DefaultCustomerProviderExecutor executor = (DefaultCustomerProviderExecutor)this.getCustomerProvider();
return (DefaultCustomerProviderImpl) executor.getDefaultCustomerProviderService();      

Me sale el error:

Causado por: java.lang.ClassCastException: $ Proxy17 no se puede convertir a my.package.DefaultCustomerProviderImpl

¿Alguien ha pasado por esto?

preguntado el 01 de febrero de 12 a las 14:02

Probablemente use AOP para realizar alguna preocupación transversal. Verifique la respuesta aceptada aquí: stackoverflow.com/questions/3852564/… -

2 Respuestas

return (DefaultCustomerProvider) executor.getDefaultCustomerProviderService();

Transmitir a la implementación es desafiar el significado de tener una interfaz definida.

Respondido 02 Feb 12, 00:02

¿Por qué le echas la interfaz a su implementación? Las interfaces son para evitar esto. Normalmente debería utilizar solo la interfaz.

Dado que, de forma predeterminada, Spring no genera proxy para clases, solo proxies de Java, el bean que obtiene del contexto está implementando toda la interfaz del bean, pero no extiende el bean en sí (el bean original solo está envuelto por el proxy).

Respondido 01 Feb 12, 18:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.