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

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

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

    溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://m.tkk7.com/sxyx2008/謝謝合作!!!

    雪山飛鵠

    溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://m.tkk7.com/sxyx2008/謝謝合作!!!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
    環境

    UserDAO
    package com.spring.dao;

    import org.springframework.stereotype.Component;

    @Component(
    "userDAO")
    public class UserDao {

        
    public void say() {
            System.out.println(
    "say method is called");
        }

        
    public void smile() {
            System.out.println(
    "smile method is called");
        }
        
        
    public void cry() {
            System.out.println(
    "cry method is called");
        }
        
        
    public void jump() {
            System.out.println(
    "jump method is called");
        }
    }
    不做過多解釋,不清楚的可參考上篇Spring AOP之HelloWorld xml配置
    UserService
    package com.spring.service;

    import javax.annotation.Resource;

    import org.springframework.stereotype.Component;

    import com.spring.dao.UserDao;

    @Component(
    "userService")
    public class UserService {
        
        @Resource(name
    ="userDAO")
        
    private UserDao dao;

        
    public UserDao getDao() {
            
    return dao;
        }

        
    public void setDao(UserDao dao) {
            
    this.dao = dao;
        }
        
        
    public void say() {
            dao.say();
        }

        
    public void smile() {
            dao.smile();
        }
        
        
    public void cry() {
            dao.cry();
        }
        
        
    public void jump() {
            dao.jump();
        }
    }
    Aop攔截類
    package com.spring.aop;

    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.springframework.stereotype.Component;

    @Component(
    "logIntercepter")
    @Aspect
    public class LogIntercepter {
        
        
    /*public void before(){
            System.out.println("----------before-------------");
        }
        
        public void after(){
            System.out.println("----------after-------------");
        }
        
        public void exception(){
            System.out.println("----------exception-------------");
        }
        
        public void around(){
            System.out.println("----------exception-------------");
        }
    */
        
        @Before(
    "execution(* com.spring.service..*.*(..))")
        
    public void before(){
            System.out.println(
    "----------before-------------");
        }
        
        @After(
    "execution(* com.spring.service..*.*(..))")
        
    public void after(){
            System.out.println(
    "----------after-------------");
        }
        
        @AfterThrowing(
    "execution(* com.spring.service..*.*(..))")
        
    public void exception(){
            System.out.println(
    "----------exception-------------");
        }
        
        
    /*@Around("execution(* com.spring.service..*.*(..))")
        public void around(){
            System.out.println("----------exception-------------");
        }
    */
        

        
        
    }
    注意觀察
    此類使用了@Aspect注解,你需要在spring配置文件中使用<aop:aspectj-autoproxy/>標簽開啟注解功能
    接下來依次定義了一系列方法before、after、exception、around依次標注注解為@Before("execution(* com.spring.service..*.*(..))") 、@After("execution(* com.spring.service..*.*(..))")、@AfterThrowing("execution(* com.spring.service..*.*(..))")、@Around("execution(* com.spring.service..*.*(..))") ,分別為spring aop 的前置通知、后置通知、異常通知、環繞通知,當進入com.spring.service包或子包下的所有方法時他們都會起作用,其中異常通知,只有在該方法出現異常時才會調用
    applicationContext.xml
    <?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:p
    ="http://www.springframework.org/schema/p"
        xmlns:context
    ="http://www.springframework.org/schema/context"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
        xsi:schemaLocation
    ="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
    >
        
    <context:annotation-config/>
        
    <context:component-scan base-package="com.spring.*"/>
        
    <aop:aspectj-autoproxy/>
        
        
    <!-- 
            <aop:config>
                <aop:aspect id="aspect" ref="logIntercepter">
                    <aop:pointcut expression="execution(* com.spring.service..*(..))" id="pointCut"/>
                    <aop:before method="before" pointcut-ref="pointCut"/>
                    <aop:after method="after" pointcut-ref="pointCut"/>
                    <aop:after-throwing method="exception" pointcut-ref="pointCut"/>
                        <aop:around method="around" pointcut-ref="pointCut"/>
                </aop:aspect>
            </aop:config>
        
    -->
            
    </beans>
    內容很簡單
    就這三行
    <context:annotation-config/>
    <context:component-scan base-package="com.spring.*"/>
    <aop:aspectj-autoproxy/>
    其中注視部分為xml配置部分的代碼
    單元測試
    package com.spring.test;

    import javax.annotation.Resource;

    import org.junit.Test;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;

    import com.spring.service.UserService;

    @ContextConfiguration(locations
    ="classpath:applicationContext.xml")
    public class SpringTest extends AbstractJUnit4SpringContextTests {

        @Resource(name
    ="userService")
        
    private UserService userService;
        
        @Test
        
    public void test1(){
            userService.say();
            System.out.println();
            userService.smile();
            System.out.println();
            userService.cry();
        }
        
    }
    運行結果

    ----------before-------------
    say method is called
    ----------after-------------

    ----------before-------------
    smile method is called
    ----------after-------------

    ----------before-------------
    cry method is called
    ----------after-------------

    點我下載工程代碼

    posted on 2010-10-29 11:11 雪山飛鵠 閱讀(2077) 評論(0)  編輯  收藏 所屬分類: spring
    主站蜘蛛池模板: 中文字幕亚洲码在线| 亚洲国产综合专区电影在线 | 亚洲午夜久久久久妓女影院| 亚洲av第一网站久章草| 成人免费在线视频| 中文字幕乱码亚洲无线三区| 67194成是人免费无码| 亚洲成_人网站图片| 成人免费午间影院在线观看| 亚洲av永久中文无码精品 | 日韩欧毛片免费视频| 亚洲Av无码一区二区二三区| 成人男女网18免费视频| 国产精品国产亚洲区艳妇糸列短篇| 免费特级黄毛片在线成人观看| 国产精品久久久久久亚洲影视| 亚洲精品无码专区2| 人妻免费一区二区三区最新| 久久亚洲精品无码VA大香大香| 最近2019中文字幕免费看最新| 在线91精品亚洲网站精品成人| 亚洲人妻av伦理| 四虎国产成人永久精品免费| 亚洲一卡2卡3卡4卡乱码 在线| 国产免费观看a大片的网站| 国产精品极品美女自在线观看免费 | 日产国产精品亚洲系列| a毛片免费全部播放完整成| 亚洲AV无码精品色午夜在线观看| av无码国产在线看免费网站| 久久精品国产亚洲av品善| 亚洲色婷婷一区二区三区| 免费在线视频你懂的| 在线观看亚洲专区| 久久精品国产亚洲av高清漫画| 日韩在线播放全免费| 免费国产va视频永久在线观看| 亚洲电影国产一区| 国产在线观看免费视频播放器 | 黄色网址免费观看| 老司机免费午夜精品视频|