Definice cílů (pointcuts)

Na které metody mají být pokyny aplikovány, je určeno prostřednictvím definic cílů, které mají za úkol identifikovat objekty a jejich konkrétní metody, na něž bude daný pokyn aplikován. Definice cílů jsou v rámci Spring™ reprezentovány rozhraním org.springframework.aop.Pointcut, jehož implementace může vypadat například takto:

import org.springframework.aop.ClassFilter;
import org.springframework.aop.MethodMatcher;
import java.lang.reflect.Method;

public class SamplePointcut implements Pointcut {
  
  public ClassFilter getClassFilter() {
    return new ClassFilter() {
      public boolean matches(Class clazz) {
        ... vrátí true pro třídy, které vyhovují ...
      }
    };
  }

  public MethodMatcher getMethodMatcher() {
    return new MethodMatcher() {
      public boolean isRuntime() {
        ... vrátí true pro dynamické definice cílů nebo false 
            pro statické definice cílů ...
      }
      public boolean matches(Method m, Class targetClass) {
        ... vrátí true pro metody a třídy, které vyhovují ...
      }
      public boolean matches(Method m, Class targetClass, Object[] args) {
        ... vrátí true pro metody, její parametry a třídy, které vyhovují ...
      }
    };
  }
}

Tato definice cílů je schopna pro jakoukoliv trojici {třída, metoda, parametry metody} určit, zda vyhovuje definici cílů či nikoliv. Nejdříve bude ověřena přípustnost třídy prostřednictvím volání getClassFilter().matches(Class) a v případě kladné návratové hodnoty se přejde k ověření metody. Vrací-li metoda getMethodMatcher().isRuntime() hodnotu true, pak mluvíme o takzvané dynamické definici cílů (dynamic pointcuts), vrací-li hodnotu false, pak jde o statickou definici cílů (static pointcut). Statické definice cílů jsou upřednostňovány vzhledem k možnosti překladu a vyhodnocení již při tvorbě tzv. AOP proxy objektu (viz „AOP proxy“).

Komentáře

Téma neobsahuje žádné komentáře.

Vložit komentář

Můžete používat značkovací jazyk Texy!


Jméno:
E-mail:
Url:
Komentář:
1 + 2 =
 
MoroSystems, s.r.o.