Ci sono differenze tra intercettori e decoratori in Java? A rigor di termini, posso implementare le cose con i decoratori che non sono possibili con gli intercettori e viceversa?Differenza tra intercettori e decoratori
Tranne il problema che avrei dovuto esaminare il nome del metodo per aggiungere comportamento specifico metodo in un intercettore:
Interceptor:
@Nice
@Interceptor
public class NiceGreeterInterceptor {
@AroundInvoke
public Object decorate(InvocationContext ic) throws Exception {
Method method = ic.getMethod();
String methodName = method.getName();
Object result = ic.proceed();
if (methodName.equals("greet")) {
return "NEW " + result;
}
}
}
Decorator:
@Decorator
public class GreeterDecorator implements Greeter {
@Inject
@Any
@Delegate
private Greeter greeter;
@Override
public String greet() {
return "NEW " + greeter.greet();
}
}
O è è legittimo dire che posso riprodurre tutto il comportamento dei decoratori con gli intercettori ma è più comodo usare i decoratori?
Un decoratore viene applicato automaticamente alle classi che implementano la stessa interfaccia (tranne l'utilizzo di un qualificatore personalizzato). Quindi più di una lezione decorata. – ammerzon
D'accordo, è uno a uno o uno a più, ma ancora, hai l'interfaccia, quindi è fortemente orientata agli oggetti. Con AOP, è più flessibile perché puoi usare i filtri di tipo (ad es. Proxy tutti i metodi di alcune classi) così come i filtri di regola ex string (ad es. Proxy tutti i metodi che iniziano con select e fanno parte del pacchetto com.example.dao). – Bax
Puoi aggiungere il tuo commento alla tua risposta con un esempio di filtri di regex matching – ammerzon