閑人野居
          好好學習,天天向上
          posts - 57,  comments - 137,  trackbacks - 0

          前面主要介紹了如何通過xml實現aop編程,下面主要介紹如何通過@AspectJ來實現。
          為了使@AspectJ 支持生效,
          需要做以下步驟:
          xml中設置

          <aop:aspectj-autoproxy/>

          或者
          在xml中加入
          <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />

          聲明 aspect

          <bean id="myAspect" class="org.xyz.NotVeryUsefulAspect">

          ?? <!-- configure properties of aspect here as normal -->

          </bean>

          ?

          package org.xyz;

          import org.aspectj.lang.annotation.Aspect;

          ?

          @Aspect

          public class NotVeryUsefulAspect {

          ?

          }

          聲明 pointcut

          @Pointcut("execution(* transfer(..))")

          public void transfer() {}


          聲明 advice

          Before advice:

          @Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")

          ? public void doAccessCheck() {

          ??? // ...

          ? }

          After returning advice:

          @AfterReturning("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")

          ? public void doAccessCheck() {

          ??? // ...

          ? }

          或者

          @AfterReturning(
          pointcut="com.xyz.myapp.SystemArchitecture.dataAccessOperation()",
          returning="retVal")

          public void doAccessCheck(Object retVal) {

          ??? // ...

          ? }

          After throwing advice:

          @AfterThrowing("SystemArchitecture.dataAccessOperation()")

          ? public void doRecoveryActions() {

          ??? // ...

          ? }

          或者

          @AfterThrowing(

          ??? pointcut=" SystemArchitecture.dataAccessOperation()",

          ??? throwing="ex")

          ? public void doRecoveryActions(DataAccessException ex) {

          ??? // ...

          ? }

          After (finally) advice:

          @After("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")

          ? public void doReleaseLock() {

          ??? // ...

          ? }

          Around advice:

          @Around("com.xyz.myapp.SystemArchitecture.businessService()")

          ? public Object doBasicProfiling( ProceedingJoinPoint pjp) throws Throwable {

          ??? // start stopwatch

          ??? Object retVal = pjp.proceed();

          ??? // stop stopwatch

          ??? return retVal;

          ? }

          Advice parameters:

          @Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation() &&" + "args(account,..)" )

          public void validateAccount(Account account) {

          ? // ...

          }

          聲明參數名稱:

          @Before(

          ?? value="com.xyz.lib.Pointcuts.anyPublicMethod() && " +

          ???????? "@annotation(auditable)",

          ? ?argNames="auditable" )

          public void audit(Auditable auditable) {

          ? AuditCode code = auditable.value();

          ? // ...

          }?

          Advice 排序:

          一般以聲明的方法次序為先后

          不同的 Advice ,通過實現 Ordered 接口,來排序


          Introductions

          用于引入新的接口

          @Aspect

          public class UsageTracking {

          ?

          ? @DeclareParents(value="com.xzy.myapp.service.*+",

          ????????????????? defaultImpl=DefaultUsageTracked.class)

          ? public static UsageTracked mixin;

          ?

          ? @Before("com.xyz.myapp.SystemArchitecture.businessService() &&" +

          ????????? "this(usageTracked)")

          ? public void recordUsage(UsageTracked usageTracked) {

          ??? usageTracked.incrementUseCount();

          ? }

          ?

          }

          ?

          posted on 2006-09-15 19:31 布衣郎 閱讀(1627) 評論(1)  編輯  收藏 所屬分類: aopspring

          FeedBack:
          # re: spring aop編程(二)
          2008-04-27 21:00 | 只喝可樂的貓
          直接COPY SPRING 中的文檔。也不加注釋。。
          有意義嗎。
          。。太假了。。
          做技術的直接COPY來貼來網上。  回復  更多評論
            

          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(12)

          隨筆分類(59)

          隨筆檔案(57)

          blog

          java

          uml

          搜索

          •  

          積分與排名

          • 積分 - 357344
          • 排名 - 155

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 长宁县| 剑川县| 岐山县| 吉木萨尔县| 呼和浩特市| 清流县| 上高县| 清涧县| 桑植县| 渑池县| 肇庆市| 临澧县| 万年县| 蛟河市| 略阳县| 紫金县| 铁岭市| 若尔盖县| 苍南县| 临桂县| 隆林| 南昌市| 长宁县| 长春市| 盐亭县| 墨竹工卡县| 扶绥县| 扎囊县| 海宁市| 常熟市| 来宾市| 沅江市| 海晏县| 泾阳县| 毕节市| 金门县| 同江市| 安多县| 荆门市| 吉林市| 长宁县|