一、Java注解 :
二、入门示例<编程式>:
public interface Waiter {
public void greetTo(String clientName);
public void serveTo(String clientName);
}
/**
* 目标类方法
* @author fmr
*/
public class NaiveWaiter implements Waiter{
@Override
public void greetTo(String clientName) {
System.out.println("NaiveWaiter: greetTo..."+clientName+"...");
}
@Override
public void serveTo(String clientName) {
System.out.println("NaiveWaiter: serveTo..."+clientName+"...");
}
}
/**
* 业务增强类
* @author fmr
*/
@Aspect //标识切面
public class PreGreetingAspect {
@Before("execution(* greetTo(..))") //定义切点和增强类型
public void beforeGreeting() { //增强的横切逻辑
System.out.println("How are you");
}
}
/**
* 测试类
* @author fmr
*/
public class AspectJProxyTest {
public static void main(String[] args) {
//1、创建代理工厂
AspectJProxyFactory factory = new AspectJProxyFactory();
//2、创建目标对象
Waiter waiter = new NaiveWaiter();
//3、设置目标对象
factory.setTarget(waiter);
//4、添加切面类
factory.addAspect(PreGreetingAspect.class);
//5、生成代理对象
Waiter proxyWaiter = factory.getProxy();
//6、运行
proxyWaiter.greetTo("张三");
proxyWaiter.serveTo("张三");
}
}
xml配置:
三、增强类型:
@Before @AfterReturning @Around @AfterThrowing---> 抛出增强
@After --- > Final 增强:不管是抛出异常还是正常退出。
四、切点表达式:<常用>