閑人野居
          好好學習,天天向上
          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 布衣郎 閱讀(1631) 評論(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

          搜索

          •  

          積分與排名

          • 積分 - 357588
          • 排名 - 155

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 长阳| 海安县| 东源县| 云阳县| 恩平市| 蓬安县| 论坛| 新兴县| 苗栗县| 敦化市| 琼海市| 邮箱| 康保县| 正宁县| 石嘴山市| 黎城县| 兰州市| 宜宾县| 信丰县| 华安县| 平定县| 密云县| 南部县| 罗源县| 玛多县| 南丹县| 金华市| 贵南县| 丰城市| 那曲县| 同江市| 京山县| 太仆寺旗| 延津县| 海城市| 句容市| 连云港市| 甘孜县| 偏关县| 广平县| 桐乡市|