<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    fun

     

    Spring AOP 簡單入門筆記

    分享一個自己寫的最為簡單的Spring AOP的應用,其實,本人也是學習Spring不久,只是把一些個人的理解分享下,供參考。可能很多人剛開始不太理解到底啥是AOP,其實它也是相對OOP來說的,類似OOP其實也是一種編程思想吧。本人暫且把Spring 中的AOP理解成一種方法的攔截器(可能有所片面,主要是方便理解)。

    個人通俗理解,就好比你去自動取款機取錢,邊上裝了個攝像頭在監視著。你取你的錢,不用管那攝像頭干嘛,只是對于攝像頭來說,已經把你取錢的這一過程記錄了下來。你取錢的這一過程我們可以從OOP角度分析,而對于攝像頭來說,就是從AOP角度去分析了。反映到我下面要講的示例就是系統日志的記錄。

     

    我要講的示例大致是這樣的,從OOP角度分析,就是說現在有一個User對象,然后你要調用業務邏輯實現去保存(或者其他行為)這個User對象,或者說是做持久化操作,把User對象相關信息寫進數據庫。那么從AOP角度來看,就是在你進行保存對象這一行為發生的時候進行日志記錄。就是說,你在進行業務操作的時候,不需要去關心系統背后到底做了啥,Spring AOP它已經幫你搞定了。

    以下是代碼具體實現:(采用Spring2.5,Myeclipse6.5)

    (一)、從AOP角度分析:   
      
    package org.wiki.spring.aspect;   
      
    import org.aspectj.lang.JoinPoint;   
      
    /**  
     * 定義切面類,將系統中的橫切性關注點模塊化  
     *   
     * 
    @author http://www.bt285.cn BT下載
        
    http://www.5a520.cn 小說520網 
     *   
     
    */
      
    public class Aspect {   
      
        
    /**  
         * 定義advice,即切面類中方法具體實現, 這里主要是用于記錄日志,只做簡單處理。  
         *   
         * 
    @param joinPoint,可以取得被攔截方法的一些信息  
         
    */
      
        
    public void logging(JoinPoint joinPoint) {   
            
    //得到被攔截方法參數,并打印   
            Object[] args = joinPoint.getArgs();   
            
    for (int i = 0; i < args.length; i++{   
                System.out.println(
    "method arg" + i + " -- " + args[i]);   
            }
       
               
            
    //得到被攔截方法簽名   
            System.out.println(joinPoint.getSignature().getName());   
               
            
    //記錄系統日志具體實現   
            System.out.println("----logging-----");   
        }
       
    }
       
      
    (二)從DAO,數據持久化角度分析:   
    package org.wiki.spring.dao;     
      
    import org.wiki.spring.domain.User;   
      
    /**  
     * 定義IUserDAO接口,目的是為了靈活實現UserDAO不同的操作。  
    @author http://www.bt285.cn BT下載
        
    http://www.5a520.cn 小說520網 
     *  
     
    */
      
    public interface IUserDAO {   
           
        
    public void addUser(User user);   
           
        
    public void deleteUser(int id);   
           
        
    public void updateUser(int id);   
    }
       
      
      
    //==================================================   
      
    package org.wiki.spring.dao;     
      
    import org.wiki.spring.domain.User;   
      
    /**  
     * IUserDAO接口的具體實現,這里只做簡單處理  
     * 
    @author Wiki.M  
     *  
     
    */
      
    public class UserDAOImpl implements IUserDAO {   
      
        @Override  
        
    public void addUser(User user) {   
            System.out.println(
    "----addUser----");   
      
        }
       
      
        @Override  
        
    public void deleteUser(int id) {   
            System.out.println(
    "----deleteUser----");   
      
        }
       
      
        @Override  
        
    public void updateUser(int id) {   
            System.out.println(
    "----updateUser----");   
      
        }
       
    }
       
      
    (三)域模型分析   
    package org.wiki.spring.domain;     
      
    /**  
     * 領域模型User  
     * 
    @author Wiki.M  
     *  
     
    */
      
    public class User {   
           
        
    private int id;   
           
        
    private String name;   
           
        
    private String password;   
           
        
    public int getId() {   
            
    return id;   
        }
       
      
        
    public void setId(int id) {   
            
    this.id = id;   
        }
       
      
        
    public String getName() {   
            
    return name;   
        }
       
           
        
    public void setName(String name) {   
            
    this.name = name;   
        }
       
           
        
    public String getPassword() {   
            
    return password;   
        }
       
           
        
    public void setPassword(String password) {   
            
    this.password = password;   
        }
       
      
    }
       
      
    (四)、從業務層分析:   
    package org.wiki.spring.service;     
      
    import org.wiki.spring.domain.User;   
      
    /**  
     * 定義User業務邏輯相關的一個接口,  
     * 目的是為了在客戶端自由調用接口實現  
     * 
    @author Wiki.M  
     *  
     
    */
      
    public interface IUserService {   
           
       
    public void saveUser(User user);   
          
       
    public void deleteUser(int id);   
          
       
    public void updateUser(int id);    
    }
       
      
    //=========================================   
      
     
    package org.wiki.spring.service;     
      
    import org.wiki.spring.dao.IUserDAO;   
    import org.wiki.spring.domain.User;   
      
    /**  
     * 業務邏輯接口IUserService的具體實現  
    @author http://www.guihua.org 中國桂花樹
        
    http://www.5a520.cn 小說520網  
     *  
     
    */
      
    public class UserServiceImpl implements IUserService {   
      
        
    private IUserDAO userDAO;   
           
        
    public void setUserDAO(IUserDAO userDAO) {   
            
    this.userDAO = userDAO;   
        }
       
           
        @Override  
        
    public void deleteUser(int id) {   
            userDAO.deleteUser(id);   
        }
       
      
        @Override  
        
    public void saveUser(User user) {   
            userDAO.addUser(user);   
      
        }
       
      
        @Override  
        
    public void updateUser(int id) {   
            userDAO.updateUser(id);   
        }
       
      
    }
       
      
    (五)從客戶端調用分析:   
    package org.wiki.spring.client;     
      
    import org.springframework.beans.factory.BeanFactory;   
    import org.springframework.context.support.ClassPathXmlApplicationContext;   
    import org.wiki.spring.domain.User;   
    import org.wiki.spring.service.IUserService;   
      
    public class Client {   
           
        
    /**  
         * 客戶端調用,用于測試  
         * 
    @param args  
         
    */
      
        
    public static void main(String[] args){   
               
            BeanFactory factory 
    = new ClassPathXmlApplicationContext("*.xml");   
               
            
    //得到UserService具體實現,用于操作業務邏輯   
            IUserService userService = (IUserService)factory.getBean("userServiceImpl");   
               
            User user 
    = new User();   
            user.setId(
    1);   
            user.setName(
    "Wiki");   
            user.setPassword(
    "123");   
               
            
    //測試1,記錄日志   
            userService.saveUser(user);   
               
            
    //測試2,記錄日志   
            userService.deleteUser(1);   
        }
       
    }
      

     Spring配置文件:

    <?xml version="1.0" encoding="UTF-8"?>  
      
    <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns:aop
    ="http://www.springframework.org/schema/aop"  
        xmlns:tx
    ="http://www.springframework.org/schema/tx"  
        xsi:schemaLocation
    ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd   
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
    >  
           
        
    <!-- 配置UserDAOImpl -->  
        
    <bean id="userDAO" class="org.wiki.spring.dao.UserDAOImpl"/>  
           
        
    <!-- 配置UserServiceImpl -->  
        
    <bean id="userServiceImpl"  
            class
    ="org.wiki.spring.service.UserServiceImpl">  
            
    <!-- 注入userDAO,實際為UserDAOImpl,即對數據持久化的具體實現 -->  
            
    <property name="userDAO" ref="userDAO" />  
        
    </bean>  
           
        
    <!-- 配置aspect切面類 -->  
        
    <bean id="userAspect" class="org.wiki.spring.aspect.Aspect" />  
      
        
    <!-- 配置AOP -->  
        
    <aop:config>  
            
    <!-- 配置aspect切面類 -->  
            
    <aop:aspect ref="userAspect">  
                
    <!-- 配置pointcut,即切入點,對哪些類的哪些方法起到AOP的作用 -->  
                
    <aop:pointcut id="userServiceMethods"  
                    expression
    ="execution(* org.wiki.spring.service.UserServiceImpl.*(..))" />      
                
    <!-- 配置advice,即Aspect類中的logging()方法,這里采用在業務方法執行前進行攔截 -->  
                
    <aop:before method="logging" pointcut-ref="userServiceMethods" />  
            
    </aop:aspect>  
               
        
    </aop:config>  
    </beans>  

    posted on 2009-04-23 18:30 fun 閱讀(1526) 評論(0)  編輯  收藏

    導航

    統計

    常用鏈接

    留言簿(11)

    隨筆檔案

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一卡2卡4卡5卡6卡在线99| 亚洲第一精品福利| 亚洲精品色播一区二区| 波多野结衣在线免费观看| 亚洲免费在线视频| 18级成人毛片免费观看| 亚洲日本国产精华液| 一色屋成人免费精品网站 | 成年在线观看网站免费| 亚洲国产综合人成综合网站00| 久草视频免费在线| 亚洲熟妇无码八V在线播放| 成人毛片免费观看视频在线| 中文字幕亚洲综合久久综合| 欧洲美熟女乱又伦免费视频| 无忧传媒视频免费观看入口| 久久精品国产亚洲Aⅴ蜜臀色欲| 中文在线免费看视频| 亚洲国产一区二区三区青草影视| 13一14周岁毛片免费| 亚洲一区二区三区写真| 又色又污又黄无遮挡的免费视 | 亚洲精品成人网久久久久久| 香蕉免费看一区二区三区| 亚洲自偷自拍另类12p| 国产国产人免费视频成69堂| 亚洲AV永久无码精品一福利| 国产AV无码专区亚洲AWWW| 免费看又黄又无码的网站| 亚洲色欲色欲www在线播放| 亚洲午夜精品久久久久久浪潮| 国产免费无码AV片在线观看不卡 | 亚洲国产精品日韩| 91精品全国免费观看含羞草 | 亚洲宅男精品一区在线观看| 四虎永久在线精品免费影视 | 久久国产精品免费一区| 亚洲精品亚洲人成在线麻豆| 精品免费国产一区二区三区| 免费人成激情视频在线观看冫 | 亚洲色偷偷综合亚洲AVYP|