Solución:
Punto de unión: Un punto de unión es un candidato punto en el Ejecución del programa de la aplicación donde se puede conectar un aspecto. Este punto podría ser un método que se está llamando, una excepción lanzada o incluso un campo que se está modificando. Estos son los puntos donde el código de su aspecto se puede insertar en el flujo normal de su aplicación para agregar un nuevo comportamiento.
Consejo: Este es un objeto que incluye invocaciones de API a las preocupaciones de todo el sistema que representan la acción a realizar en un punto de unión especificado por un punto.
Pointcut: Un punto de corte define en qué puntos de unión se deben aplicar los consejos asociados. El asesoramiento se puede aplicar en cualquier punto de unión compatible con el marco AOP. Por supuesto, no desea aplicar todos sus aspectos en todos los puntos de unión posibles. Los puntos le permiten especificar dónde desea que se apliquen sus consejos. A menudo, usted especifica estos puntos de acceso utilizando nombres de métodos y clases explícitos o mediante expresiones regulares que definen patrones de nombres de métodos y clases coincidentes. Algunos marcos de AOP le permiten crear puntos de acceso dinámicos que determinan si aplicar consejos basados en decisiones en tiempo de ejecución, como el valor de los parámetros del método.
La siguiente imagen puede ayudarlo a comprender Advice, PointCut, Joinpoints.
Fuente
Explicación usando la analogía del restaurante: Fuente de @Victor
Cuando vas a un restaurante, miras un menú y ves varias opciones para elegir. Puede pedir uno o más de los elementos del menú. Pero hasta que los pidas, son solo “oportunidades para cenar”. Una vez que haces el pedido y el camarero lo lleva a tu mesa, es una comida.
Los puntos de unión son opciones en el menú y los accesos de puntos son elementos que selecciona.
Un Joinpoint es una oportunidad dentro del código para que aplique un aspecto … solo una oportunidad. Una vez que aproveche esa oportunidad y seleccione uno o más Joinpoints y les aplique un aspecto, obtendrá un Pointcut.
Fuente Wiki:
A Joinpoint es un punto en el flujo de control de un programa donde el flujo de control puede llegar a través de dos caminos diferentes(OMI: es por eso que llamar conjunta).
Consejo describe una clase de funciones que modifican otras funciones
A Pointcut es una coincidencia PAGattern of Joinpoint, es decir, conjunto de puntos de unión.
Para comprender la diferencia entre un punto de unión y un corte de punto, piense en los cortes de puntos como especificando las reglas de tejido y los puntos de unión como situaciones que satisfacen esas reglas.
En el siguiente ejemplo,
@Pointcut("execution(* * getName()")
Pointcut define reglas que dicen, los consejos deben aplicarse sobre el método getName () presente en cualquier clase en cualquier paquete y joinpoints será una lista de todos los métodos getName () presentes en las clases para que se puedan aplicar consejos sobre estos métodos.
(En el caso de Spring, Rule se aplicará solo en beans administrados y los consejos solo se pueden aplicar a métodos públicos).
JoinPoints: Básicamente, se trata de lugares de la lógica empresarial real en los que desea insertar algunas funciones diversas que son necesarias pero que no forman parte de la lógica empresarial real. Algunos ejemplos de JoinPints son: llamada de método, método que regresa normalmente, método que lanza una excepción, instancia de un objeto, referencia de un objeto, etc.
Pointcuts: Los cortes de puntos son algo así como expresiones regulares que se utilizan para identificar puntos de unión. Los pontcuts se expresan usando “lenguaje de expresión pointcut”. Los pointcuts son puntos de flujo de ejecución donde se debe aplicar la preocupación transversal. Existe una diferencia entre Joinpoint y Pointcut; Los puntos de unión son más generales y representan cualquier flujo de control en el que ‘podemos optar por’ introducir una preocupación transversal, mientras que pointcuts identifica los puntos de unión en los que ‘queremos’ introducir una preocupación transversal.