Spring中的AOP-ProxyFactory


《疯狂java 突破程序员基本功的16课》


1. 前置通知

实现org.springframework.aop.MethodBeforeAdvice接口的before方法,该方法接受三个参数:被调用的方法、传给该方法的参数和目标对象。
public class SimpleBeforeAdvice implements MethodBeforeAdvice {
    public static void main(String[] args) {
        MessageWriter target = new MessageWriter();

        ProxyFactory pf = new ProxyFactory();
        pf.setTarget(target);
 
        MessageWriter proxy = (MessageWriter) pf.getProxy();
 
        proxy.writeMessage();
    }
    public void before(Method method, Object[] args, Object target) throws Throwable {
        System.out.println("Before method: " + method.getName());
    }
}


重点关注的代码为before方法以及ProxyFactory将实体转化为代理类的过程。
以上代码表明在执行MessageWriter的所有方法之前,都会先执行before之内的内容。
 
2. 后置通知
后置通知与前置通知类似,只是后置通知需实现org.springframework.aop.AfterReturningAdvice接口的afterReturning方法,该方法同样接受三个参数:被调用的方法、传给该方法的参数和目标对象。
3. 包围通知
包围通知在功能上综合了前置通知和后置通知,除了一个重要区别:我们可以修改方法的返回值,不仅如此,我们还可以阻止目标方法的实际执行。这意味着用包围通知,我们可以将目标方法的实现完全更换成新的代码。
包围通知实现了org.aopalliance.intercept.MethodInterceptor的invoke方法,该方法只接受MethodInvocation对象,但可通过以下方法获取被调用的方法、传给该方法的参数和目标对象:
Method m = invocation.getMethod();
Object target = invocation.getThis();
Object[] args = invocation.getArguments();


调用包围通知的方式与前置通知和后置通知类似,使用ProxyFactory。
4. 抛出通知
抛出通知跟后置通知一样是在连接点之后运行的,不过抛出通知只在方法抛出一个异常时才执行。
抛出通知实现org.springframework.aop.ThrowsAdvice接口,该接口没有定义任何方法,Spring是通过查看抛出通知中的一个或多个名为afterThrowing的public方法来处理抛出通知的。该方法的返回值类型并不重要,不过一般定义为void,因为该方法不能返回任何有意义的值。
对于抛出的每一个异常,Spring只会运行一个afterThrowing。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值