Spring之AOP:我行之我見 – JAVA編程語言程序開發技術文章

AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程(也叫面向方面),可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。也叫面向方面:Aspect Oriented Programming(AOP),是目前軟件開發中的一個熱點,也是Spring框架中的一個重要內容。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高瞭開發的效率。為啥嗎要用AOP通俗的解釋就是:好比高速公路的收費站,我相信不會有傻逼的人為每個車都建個收費站,一個收費站就夠瞭,別管你是神馬車,沒有牌照統統滾蛋。這就是AOP的功能。他不屬是與這個公路本身的一部分,而是我加上的,專門對於那些無照駕駛的。

下面我們來看看AOP在普通Java程序的實現:

[java] 
public class UserDaoImp implements UserDao { 
 
    private User user; 
    public UserDaoImp(){} 
    public UserDaoImp(User user) 
    { 
        this.user=user; 
    } 
    public User getUser() { 
        return user; 
    } 
     
    public void delete(User user) { 
        System.out.println("delete…."); 
 
    } 
 
    public void select(User user) { 
        // TODO Auto-generated method stub 
        System.out.println("select…."); 
 
    } 
 
    public void update(User user) { 
        // TODO Auto-generated method stub 
        System.out.println("update…."); 
 
    } 
 

 

[java] 
public class AopInterceptor implements InvocationHandler{ 
 
    private Object targetObject;//目標對象 
    public Object createObjectProxy(Object targetObject)//創建代理對象 
    { 
        this.targetObject=targetObject; 
        //加載目標類,目標類實現的接口,切面類 
        return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(), this); 
    } 
    public Object invoke(Object proxy, Method method, Object[] args) 
            throws Throwable { 
        // 環繞advice 
        System.out.println("環繞advice….."); 
        UserDaoImp userDaoImp=(UserDaoImp)this.targetObject; 
        if(userDaoImp.getUser()!=null) 
        { 
             
            //返回目標類方法 
            try 
            { 
                //前置advice 
                System.out.println("前置advice….."); 
                return method.invoke(targetObject, args); 
                //後置advice 
                 
            } 
             
            catch(Exception e) 
            { 
                //異常advice 
                System.out.println("異常advice….."); 
            } 
            finally 
            { 
                //最終advice 
                System.out.println("最終advice….."); 
            } 
             
        } 
        return null; 
    } 
 

 

作者:jzh440

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。