Composing multiple pointcuts together
Handling control flow pointcuts
Performing simple name-based matching
Defining pointcuts using regular expressions
Defining pointcuts using AspectJ expressions
Defining pointcuts that look for specific annotations at the class or method level
AOP Pointcut 常见用法
PiontCut UML图
import com.apress.prospring5.ch2.common.Singer; public class GoodGuitarist implements Singer { @Override public void sing() { System.out.println("Who says I can't be free \n" + "From all of the things that I used to be"); } } public class GreatGuitarist implements Singer { @Override public void sing() { System.out.println("I shot the sheriff, \n" + "But I did not shoot the deputy"); } } import java.lang.reflect.Method; import org.springframework.aop.ClassFilter; import org.springframework.aop.support.StaticMethodMatcherPointcut; public class SimpleStaticPointcut extends StaticMethodMatcherPointcut { @Override public boolean matches(Method method, Class<?> cls) { return ("sing".equals(method.getName())); } @Override public ClassFilter getClassFilter() { return cls -> (cls == GoodGuitarist.class); } } public ClassFilter getClassFilter() { return new ClassFilter() { public boolean matches(Class<?> cls) { return (cls == GoodGuitarist.class); } }; } import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; public class SimpleAdvice implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { System.out.println(">> Invoking " + invocation.getMethod().getName()); Object retVal = invocation.proceed(); System.out.println(">> Done\n"); return retVal ; } } import com.apress.prospring5.ch2.common.Singer; import org.aopalliance.aop.Advice; import org.springframework.aop.Advisor; import org.springframework.aop.Pointcut; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.support.DefaultPointcutAdvisor; public class StaticPointcutDemo { public static void main(String... args) { GoodGuitarist johnMayer = new GoodGuitarist(); GreatGuitarist ericClapton = new GreatGuitarist(); Singer proxyOne; Singer proxyTwo; Pointcut pc = new SimpleStaticPointcut(); Advice advice = new SimpleAdvice(); Advisor advisor = new DefaultPointcutAdvisor(pc, advice); ProxyFactory pf = new ProxyFactory(); pf.addAdvisor(advisor); pf.setTarget(johnMayer); proxyOne = (Singer)pf.getProxy(); pf = new ProxyFactory(); pf.addAdvisor(advisor); pf.setTarget(ericClapton); proxyTwo = (Singer)pf.getProxy(); proxyOne.sing(); proxyTwo.sing(); } }自定义 Advice, Pointcut, 生成Adviser