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“).