Sto cercando di usare qualcosa di simile a org.springframework.cache.annotation.Cacheable
:metodo Passo argomento Aspetto di annotazione personalizzati
annotazione personalizzato:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CheckEntity {
String message() default "Check entity msg";
String key() default "";
}
Aspetto:
@Component
@Aspect
public class CheckEntityAspect {
@Before("execution(* *.*(..)) && @annotation(checkEntity)")
public void checkEntity(JoinPoint joinPoint, CheckEntitty checkEntity) {
System.out.println("running entity check: " + joinPoint.getSignature().getName());
}
}
Servizio:
@Service
@Transactional
public class EntityServiceImpl implements EntityService {
@CheckEntity(key = "#id")
public Entity getEntity(Long id) {
return new Entity(id);
}
}
My IDE (IntelliJ) non vede nulla di speciale con l'utilizzo di key = "#id"
in contrasto con usi simili per Cacheable
dove viene mostrato con colori diversi rispetto al testo normale. Sto citando la parte IDE solo come suggerimento nel caso in cui aiuti, sembra che l'IDE sia a conoscenza in anticipo di queste annotazioni o semplicemente realizzi qualche connessione che non esiste nel mio esempio.
Il valore nel checkEntity.key è '#id' invece di un numero previsto. Ho provato a utilizzare ExpressionParser
ma forse non nel modo giusto.
L'unico modo per ottenere il valore del parametro all'interno dell'annotazione checkEntity è accedere all'array degli argomenti che non è quello che voglio perché questa annotazione potrebbe essere utilizzata anche in metodi con più di un argomento.
Qualche idea?
Nessun IDE sarà in grado di fornire supporto contestuale per '@ Cacheable', perché il tuo aspetto è fatto su misura. Posso chiederti che tipo di funzionalità stai tentando di fornire con il tuo Aspect? Stai cercando di controllare e vedere se un'entità esiste già? – geoand
Questo serve per verificare se questo id (diciamo departmentId) esiste nei reparti degli utenti registrati a cui possono avere accesso, lanciare un'eccezione di accesso negato altrimenti – Chris
Spring Security o Apache Shiro non fornirebbero tali funzionalità senza dover implementare la propria implementazione? – geoand