Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar anotaciones para publicar servicios Dubbo

Cómo utilizar anotaciones para publicar servicios Dubbo

Cuando se utiliza @com.alibaba.dubbo.config.annotation.Service para publicar servicios dubbo, si la clase de servicio no agrega @Transactional, no hay problema.

Pero cuando agrega una transacción @Transactional, la clase de escaneo AnnotationBean de Dubbo ejecutará el siguiente código cuando no pueda obtener la anotación correspondiente, lo que imposibilitará la publicación del servicio.

La razón es que las anotaciones proporcionadas por Dubbo no tienen la metaanotación @Inherited.

Generamos una clase de proxy a través de la anotación @Transactional en el servicio. Hay dos formas de generar la clase de proxy. Uno es el proxy dinámico jdk y el otro es el proxy dinámico CGLib.

La clase de proxy generada por el proxy dinámico jdk tiene la misma implementación de interfaz que la clase actual ***, por lo que solo tiene una relación de llamada indirecta con la clase actual y no está dentro del alcance de esta discusión.

La clase de proxy generada por CGLib es una subclase del Servicio actual y puede integrarse en las anotaciones del Servicio actual.

De acuerdo con los requisitos, necesitamos cambiar el código fuente de Dubbo

Agregar @Inherited a la anotación de servicio de Dubbo para que esta anotación se pueda heredar.

Luego fuerce a todos los beans a usar el proxy CGLib en el archivo de configuración principal de Spring del proyecto actual

Para que el servicio pueda publicarse normalmente.