開發中的動態代理與靜態代理

靜態代理:

 

靜態代理實現:

定義接口--定義目標類-定義切面類-定義代理類

代理類實現接口,實現了目標類的方法,調用切面類的方法

靜態代理的特點:

在不改變目標類的基礎上,擴展了目標類的功能

靜態代理的缺點:

隨着業務的發展,代理類的數量會不斷增加,接口中的方法增加,需要修改目標類和代理類的方法

 

動態代理:

動態代理的實現:

定義接口--定義目標類-定義切面類-定義動態代理的輔助類。

輔助類實現InvocationHandler接口

1)//獲取動態代理類的對象

/**
     * 生成代理類對象
     * arg0:代理目標類的類加載器
     * arg1:代理目標類的接口對象
     * arg2:實現了InvocationHandler接口的對象
     */
    public Object getProxy(){
        return Proxy.newProxyInstance(StudentService.class.getClassLoader(),StudentService.class.getInterfaces(), this);
        
    
    }

2)//調用目標類的方法

/**
     * 調用目標類的方法
     */
    public Object invoke(Object obj, Method method, Object[] args)
            throws Throwable {
        studentAop.log();//模擬前置通知
        obj=method.invoke(service, args);
        
        return null;
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章