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

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

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

    閑人野居
    好好學習,天天向上
    posts - 57,  comments - 137,  trackbacks - 0
    收集了幾個常用的方面:

    NoCallsIntoTestFromOutside ?? ?禁止從產品包到測試包的引用

    public abstract aspect NoCallsIntoTestFromOutside {
    ?? ?//引用帶有test的包的所有可能操作
    ?? ?pointcut referToTestPackage():
    ?? ???? call(* *..test..*.*(..)) || call(*..test..*.new(..))
    ?? ???? || get(* *..test..*.*) || set(* *..test..*.*)
    ?? ???? || get(*..test..* *) || set(*..test..* *)
    ?? ???? || (staticinitialization(!*..test..*)
    ?? ??????? && staticinitialization(*..test..*+))
    ?? ???? || call(* *(*..test..*, ..))
    ?? ???? || call(* *(*, *..test..*, ..))
    ?? ???? || call(* *(*, *, *..test..*))
    ?? ???? || call(* *(.., *..test..*))
    ?? ???? || execution(* *(*..test..*, ..))
    ?? ???? || execution(* *(*, *..test..*, ..))
    ?? ???? || execution(* *(*, *, *..test..*, ..))
    ?? ???? || execution(* *(.., *..test..*))
    ?? ???? ;
    ?? ?// getcode scary-tests END

    ?? ?abstract protected pointcut withinTypes();

    ?? ?pointcut fromWithinNonTest(): within(!*..test..*);

    ?? ?declare error: withinTypes() && referToTestPackage()
    ?? ??? ?&& fromWithinNonTest(): "production code referring to test code";?? ?
    }

    UtilityClassEnforced ??? 禁止構造實用工具類


    public aspect UtilityClassEnforced {
    ?? ?
    ??? declare error :
    ??? ??? //定義非private 的構造器
    ??? ??? execution(!private (@UtilityClass *).new(..))
    ??? ??? //調用new 初始化方法
    ??? ??? || call((@UtilityClass *).new(..))
    ??? ??? //執行工具類的任何方法
    ??? ??? || execution((@UtilityClass *) *(..))??? ???
    ??? ??? : "no instances of utility classes";

    }

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.TYPE})
    public @interface UtilityClass {

    }

    NoSystemOut ??? 禁止使用 System.err 或 System.out

    public abstract aspect NoSystemOut {
    ??? abstract protected pointcut withinTypes;
    ??? //讀取System.out對象
    ??? declare error: withinTypes() && get(PrintStream System.out) : "no System.out";
    ???? //讀取System.err對象
    ??? declare error: withinTypes() && get(PrintStream System.err) : "no System.err";
    ??? //讀取FileDescriptor.err
    ??? declare error: withinTypes() && get(PrintStream FileDescriptor.err) : "no FileDescriptor.err";
    ??? //讀取FileDescriptor.out
    ??? declare error: withinTypes() && get(PrintStream FileDescriptor.out) : "no FileDescriptor.out";
    ???? //執行Throwable.printStackTrace()方法
    ??? declare error: withinTypes() && call(void Throwable.printStackTrace()) : "no System.err";
    }

    GetterSetter ?? ?禁止在除初始化或 getter 方法以外進行字段讀取操作,禁止在初始化或 setter 方法以外進行字段寫操作

    public abstract aspect GetterSetter {
    ?? ?
    ?? ?abstract protected pointcut withinTypes();
    ?? ?//所有的sets 非public fields
    ?? ?pointcut sets() : set(!public * *);
    ?????? //所有的gets 非public fields
    ?? ?pointcut gets() : get(!public * *);
    ?? ?declare error : withinTypes() && gets() &&
    ?? ??? ?//在get*方法或者構造器以外地方使用
    ?? ??? ?!(withincode(!void get*()) || withincode(new(..)))
    ?? ??? ?: "non-public field-get outside constructor or getter method";
    ?? ?declare error : withinTypes() && sets() &&
    ?? ??? ?!(withincode(void set*(*)) || withincode(new(..)))
    ?? ??? ?: "non-public field-set outside constructor or setter method";
    }

    NoNullParameters ?? ?????? 在公共方法傳遞空參數時拋出異常

    public abstract aspect NoNullParameters {
    ?? ?abstract protected pointcut withinTypes();
    ?? ?
    ?? ?pointcut publicParameters() :
    ?? ??? ? //執行public 構造器或者public 方法
    ?? ??? ?(execution(public new(*,..)) || execution(public * *(*,..)))
    ?? ??? ? //除了執行非Object的參數,如原類型,int,long
    ?? ??? ?&& !(execution(* *(!Object+)) || execution(*.new(!Object+)));
    ?? ?//如果參數為null,則拋出例外?? ??? ??? ?
    ?? ?before() : withinTypes() && publicParameters() {
    ?? ??? ?Object[] args = thisJoinPoint.getArgs();
    ?? ??? ?for (int i = 0; i < args.length; i++) {
    ?? ??? ??? ?if (null == args[i]) {
    ?? ??? ??? ??? ?JoinPoint.StaticPart sp = thisJoinPointStaticPart;
    ?? ??? ??? ??? ?String name = AJReflect.getParameterName(sp, i);
    ?? ??? ??? ??? ?throw new IllegalArgumentException("null " + name);
    ?? ??? ??? ?}
    ?? ??? ?}
    ?? ?}
    }
    posted on 2006-11-16 18:56 布衣郎 閱讀(1068) 評論(0)  編輯  收藏 所屬分類: aop

    <2006年11月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 357268
    • 排名 - 155

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲人成国产精品无码| 国产va免费精品观看精品| 亚洲婷婷国产精品电影人久久 | 久久亚洲免费视频| 拍拍拍无挡免费视频网站| 在线亚洲97se亚洲综合在线 | 三上悠亚亚洲一区高清| 国产A∨免费精品视频| 亚洲人成77777在线播放网站| 国产三级在线免费| 亚洲成色在线影院| 日本免费一区二区在线观看| 亚洲国产精品综合久久网各| 动漫黄网站免费永久在线观看| 亚洲日韩AV一区二区三区四区| 男女啪啪永久免费观看网站| 免费人成再在线观看网站| 国产亚洲大尺度无码无码专线 | 亚洲国产精品无码久久| 免费在线看片网站| a级毛片毛片免费观看永久| 91亚洲国产在人线播放午夜| 24小时免费直播在线观看| 精品国产日韩亚洲一区在线| 亚洲国产婷婷综合在线精品| 少妇性饥渴无码A区免费 | 亚洲国产成人乱码精品女人久久久不卡 | 国产一区二区免费视频| 亚洲理论在线观看| 国产片免费福利片永久| 99在线热播精品免费99热| 亚洲五月六月丁香激情| 国产免费私拍一区二区三区| jizz18免费视频| 亚洲国产成人精品无码一区二区| 成人免费午夜视频| 久久精品免费网站网| 亚洲导航深夜福利| 亚洲日韩中文字幕日韩在线| 中文字幕免费在线观看| 国产亚洲人成在线影院|