Este documentation debe ser extremadamente útil.
Lo haría creando dos cortes de puntos individuales, uno para todos los métodos públicos, y uno para todas las clases anotadas con @Service, y luego crearé un tercero que combine las expresiones de puntos de corte de los otros dos.
Tome un vistazo a (7.2.3.1 Apoyado pointcut designadores) para los que los designadores de usar. Creo que buscas el designador de "ejecución" para encontrar métodos públicos y el designador de "anotación" para encontrar tu anotación.
A continuación, echar un vistazo a (7.2.3.2 La combinación de expresiones pointcut) para combinarlas.
He proporcionado algunos códigos a continuación (que tengo no probado). Se toma principalmente de la documentación.
@Pointcut("execution(public * *(..))") //this should work for the public pointcut
private void anyPublicOperation() {}
//@Pointcut("@annotation(Service)") this might still work, but try 'within' instead
@Pointcut("@within(Service)") //this should work for the annotation service pointcut
private void inTrading() {}
@Pointcut("anyPublicOperation() && inTrading()")
private void tradingOperation() {}
se prueban estos puntos de corte? Por lo que sé, '@ annotation' no define punto de unión, sino que recoge su contexto. ¿Tal vez deberías usar '@ within' en su lugar? – Constantiner
Mencioné en la respuesta que no he probado estos puntos de corte. Pero estoy de acuerdo, el autor de la pregunta probablemente prefiera usar @within para lograr los resultados deseados. –
¿No sería mejor enmendar su respuesta? Creo que podría no funcionar como está actualmente. He hecho lo que hace la pregunta usando 'within' y funciona, pero ahora me doy cuenta de que debería estar usando' @ within'. –