[Preguntas de la entrevista de primavera] Preguntas de la entrevista relacionadas con AOP: ¿Concepto? ¿Escenas a utilizar? ¿cómo utilizar? ¿centro?

¿Qué es el AOP?

         AOP es programación orientada a aspectos y orientada a aspectos, es una tecnología que logra el mantenimiento unificado de las funciones del programa a través de agentes dinámicos de precompilación y tiempo de ejecución. El comportamiento común de múltiples objetos se encapsula en un módulo llamado aspecto , y un determinado método es el punto de interés .

        En términos sencillos: cuando realizamos operaciones repetidas en algunos códigos, para lograr la reutilización del código, manejamos estas tareas de manera unificada y luego tenemos que incrustarlas naturalmente (usando anotaciones personalizadas) en los métodos especificados Ubicación.

        AOP se puede utilizar para aislar varias partes de la lógica empresarial, reduciendo así el acoplamiento entre las distintas partes de la lógica empresarial, mejorando la reutilización del programa y mejorando la eficiencia del desarrollo.

Como se muestra en la siguiente figura:         abstraemos el plano horizontal en un objeto de aspecto, colocamos el código de registro en el objeto de aspecto y luego programamos este objeto de aspecto. En esencia, todavía es programación orientada a objetos, pero la idea es aspecto- programación orientada. Se puede mejorar mediante aop, reduciendo el código duplicado y reduciendo el acoplamiento. Basado en la implementación de proxy.

5 términos clave

1) Preocupaciones transversales , el mismo tipo de negocio no central extraído de cada método

2) Aspecto , una clase que encapsula inquietudes transversales. Cada inquietud se incorpora como un método de notificación; la anotación @Aspect se usa generalmente para definir aspectos.

3) Consejo , cada trabajo específico que el aspecto debe completar. Por ejemplo, nuestro aspecto de registro necesita registrar el tiempo antes y después de que se llame a la interfaz. Necesita registrar el tiempo antes y después de llamar a la interfaz, y luego tomar la diferencia. . Hay cinco métodos de notificación:

  • @Before: el método de notificación se ejecutará antes de que se llame al método de destino

  • @After: el método de notificación se ejecutará después de que se llame al método de destino

  • @AfterReturning: el método de notificación se ejecutará después de que regrese el método de destino

  • @AfterThrowing: el método de notificación se ejecutará después de que el método de destino arroje una excepción

  • @Around: envuelve todo el método de destino y ejecuta el método de notificación antes y después de ser llamado.

4) JoinPoint , que notifica a la aplicación el tiempo. Por ejemplo, cuando se llama a un método de interfaz, es el punto de unión del aspecto de registro.

5) Pointcut , el alcance en el que se aplica la función de notificación. Por ejemplo, el alcance de aplicación del aspecto de registro en este artículo es la interfaz de todos los controladores. Las expresiones Pointcut generalmente se definen usando la anotación @Pointcut.

¿Has utilizado AOP en tu proyecto? ¿Escenarios de uso de AOP?

En mi proyecto, he utilizado operaciones de registro.

Cuando un usuario realiza una solicitud, debemos registrar estas operaciones. Por ejemplo, debemos registrar quién es el usuario que realiza la operación, cuál es el método de solicitud, dirección de acceso, nombre del módulo, IP de inicio de sesión, tiempo de operación, etc. Se utiliza este AOP. Para obtener detalles sobre cómo operar, consulte cómo usar AOP a continuación.

Escenarios de uso comunes

  1. Registro de operaciones

  2. Almacenamiento en caché

  3. Transacciones integradas en primavera

¿Cómo utilizar AOP?

Por ejemplo, operación de registro: el núcleo de la operación de registro es usar la expresión de notificación envolvente + punto de corte en aop (buscar el método para registrar el registro), obtener los parámetros del método de solicitud a través de los parámetros de la notificación envolvente y guardarlos. a la base de datos.

El registro se utiliza para registrar el método de solicitud (se puede obtener mediante el método de análisis), la URL, el nombre de usuario (se puede obtener mediante el análisis de la sesión), el tiempo de operación, etc.

        1. Importe AOP al proyecto, es decir, impórtelo al archivo xml.

        2. Agregue una anotación a la clase de aspecto @Aspectpara indicar que es una clase de aspecto. Por ejemplo, para las operaciones de registro, necesita escribir algunos negocios en su clase de aspecto: obtener el tiempo de operación, el nombre de usuario del operador (se puede obtener usando sesión o token), la URL accedida, el método de solicitud, etc. y luego registrarlos en la base de datos.

        3. Personaliza una anotación para marcar el código público que deseas realizar.  

                Algunos códigos deben registrarse y otros no, así que utilice esta anotación para indicar cuáles deben registrarse.

Núcleo AOP: proxy dinámico

        Agregar lógica de negocios en el programa a la clase de destino implicará un proxy dinámico. La tecnología central de AOP es el proxy dinámico, que incorpora el núcleo del proxy dinámico (la capa dao de mybatis en realidad usa el proxy dinámico jdk, solo la interfaz) necesita pasar CGlib Genera una clase de implementación como una clase de plantilla para uso del agente. Spring introduce la clase de plantilla a través del agente y genera el objeto de clase del agente. Invoke llama al método Método del objeto y pasa el objeto de clase de destino y los parámetros para completar El agente dinámico.

¿Cuál es la diferencia entre Spring AOP y AspectJ AOP?

  • springAOP es una programación AOP orientada a aspectos compatible con Spring.

  • AspectJ es un marco orientado a aspectos que amplía el lenguaje Java. AspectJ define la sintaxis AOP y tiene un compilador especializado para generar archivos Class que cumplen con las especificaciones de codificación de bytes de Java.

springAOP no es una solución AOP completa.

AspectJ es la tecnología AOP más original y se utiliza para proporcionar soluciones AOP integrales.

Spring AOP es una mejora en tiempo de ejecución , mientras que Aspect es una mejora en tiempo de compilación . Spring AOP se basa en Proxying, mientras que AspectJ se basa en la manipulación de Bytecode. Spring AOP ha integrado Aspectl, que debe considerarse como el marco AOP más completo del ecosistema Java. Aspectl es más poderoso que Spring AOP, pero Spring AOP es relativamente más simple, si tenemos menos aspectos, no hay mucha diferencia de rendimiento entre los dos. Sin embargo, cuando hay demasiados aspectos, es mejor elegir Aspectl, que es mucho más rápido que Spring A0P. Los métodos de llamada en el mismo nivel no se pueden eliminar

Supongo que te gusta

Origin blog.csdn.net/KangYouWei6/article/details/132716068
Recomendado
Clasificación