溫馨提示:您的每一次轉(zhuǎn)載,體現(xiàn)了我寫此文的意義!!!煩請您在轉(zhuǎn)載時(shí)注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          雪山飛鵠

          溫馨提示:您的每一次轉(zhuǎn)載,體現(xiàn)了我寫此文的意義!!!煩請您在轉(zhuǎn)載時(shí)注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
          環(huán)境

          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/>標(biāo)簽開啟注解功能
          接下來依次定義了一系列方法before、after、exception、around依次標(biāo)注注解為@Before("execution(* com.spring.service..*.*(..))") 、@After("execution(* com.spring.service..*.*(..))")、@AfterThrowing("execution(* com.spring.service..*.*(..))")、@Around("execution(* com.spring.service..*.*(..))") ,分別為spring aop 的前置通知、后置通知、異常通知、環(huán)繞通知,當(dāng)進(jìn)入com.spring.service包或子包下的所有方法時(shí)他們都會(huì)起作用,其中異常通知,只有在該方法出現(xiàn)異常時(shí)才會(huì)調(diào)用
          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>
          內(nèi)容很簡單
          就這三行
          <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();
              }
              
          }
          運(yùn)行結(jié)果

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

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

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

          點(diǎn)我下載工程代碼

          posted on 2010-10-29 11:11 雪山飛鵠 閱讀(2085) 評(píng)論(0)  編輯  收藏 所屬分類: spring
          主站蜘蛛池模板: 玛沁县| 鹤山市| 永修县| 高平市| 伽师县| 团风县| 牡丹江市| 常熟市| 澄江县| 新乐市| 睢宁县| 南通市| 丰都县| 曲水县| 绥江县| 长武县| 临武县| 汶上县| 抚松县| 南开区| 江孜县| 霞浦县| 澜沧| 柳州市| 屯留县| 古蔺县| 张北县| 北流市| 太仆寺旗| 镇原县| 鞍山市| 临洮县| 富锦市| 徐水县| 枝江市| 广州市| 泾阳县| 弥勒县| 和静县| 镇远县| 名山县|