spring-aspectJ实现ADP

//切面类
@Aspect
public class PreGreetingAspect{
    @Before("execution(* greetTo(..))")
    public void beforeGreeting(){
        System.out.println("How are you");
    }
}

//目标类
    @Monitorable
public class NaiveWaiter implements Waiter {
    public void greetTo(String clientName) {
        System.out.println("NaiveWaiter:greet to "+clientName+"...");
    }   
    @NeedTest
    public void serveTo(String clientName){
        System.out.println("NaiveWaiter:serving "+clientName+"...");
    }
    public void smile(String clientName,int times){
        System.out.println("NaiveWaiter:smile to  "+clientName+ times+"times...");
    }   
}

    @Test
    public void proxy(){
        //目标类
        Waiter target = new NaiveWaiter();
        //代理工厂
        AspectJProxyFactory factory = new AspectJProxyFactory();
        factory.setTarget(target);
        //织入
        factory.addAspect(PreGreetingAspect.class);
        Waiter proxy = factory.getProxy();
        proxy.greetTo("John");
        proxy.serveTo("John");
    }

@AspectJ基本语法,spring中可以使用
方法切点:
execution(*greetTo(…))..greetTo方法
@annotation(com.smart.NeddTest).有这种注解的方法。
方法入参切点:
args(com.smart.Waiter).目标类方法入参为waiter
@args(com.smart.Monitorable).目标类方法入参类有@Monitorable注解
目标类切点函数:
within(com.smart.service.*)这个类下面的所有方法都是切点
target(com.smart.waiter).这个类和实现类的所有方法
@within()
@target()
this()
*:
…:
+:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值