锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV无码一区二区三区电影,亚洲精品福利网站,中文字幕中韩乱码亚洲大片http://www.tkk7.com/masen/category/54669.htmlzh-cnTue, 03 Feb 2015 00:32:54 GMTTue, 03 Feb 2015 00:32:54 GMT60Java 鍒涘緩瀵硅薄鏂瑰紡http://www.tkk7.com/masen/articles/422168.htmlMasenMasenSat, 10 Jan 2015 14:42:00 GMThttp://www.tkk7.com/masen/articles/422168.htmlhttp://www.tkk7.com/masen/comments/422168.htmlhttp://www.tkk7.com/masen/articles/422168.html#Feedback0http://www.tkk7.com/masen/comments/commentRss/422168.htmlhttp://www.tkk7.com/masen/services/trackbacks/422168.htmlJava 鍒涘緩瀵硅薄鏂瑰紡錛?br />
    ●  鐢╪ew璇彞鍒涘緩瀵硅薄
    ●  榪愮敤鍙嶅皠鎵嬫,璋冪敤java.lang.Class 鎴栬?java.lang.reflect.Constructor 綾葷殑newInstance()瀹炰緥鏂規(guī)硶
    ●  璋冪敤瀵硅薄鐨刢lone()鏂規(guī)硶
    ●  榪愮敤搴忓垪鍖栨墜孌?璋冪敤java.io.ObjectInputStream 瀵硅薄鐨?readObject()鏂規(guī)硶.

鍒嗗埆鍒涘緩100涓囦釜javaBean 錛屾ц兘濡備笅錛?br />

//new : 46,47,47,62,47
//clone : 171,188,172,,157,172
//getClass().newInstance() : 140,141,141,,157,172
//Class.forName and newInstance : 1765,1781,1813,1797,1781
//Proxy.newProxyInstance : 2984
//Serializable : 60422

鍙﹀嫻嬭瘯浜?jiǎn)Field 鍜?Method 鎵ц鏁堢巼錛?br />
//method : 1406
//feild : 1360 getField("")寰楀埌瀹炰緥鍜岀埗綾葷殑“鍏叡”灞炴?span style="white-space:pre">
//getDeclaredField() 寰楀埌瀹炰緥鐨勬寚瀹氬睘鎬?Public,protected,dfault,pivate),涓嶅寘鎷埗綾誨睘鎬?/div>
//getFields()榪斿洖field鏁扮粍錛?寰楀埌瀹炰緥 鍜?鐖剁被 鐨勬墍鏈? “鍏叡”灞炴?br />
鍔ㄦ佷唬鐞嗭細(xì)
JDK錛歫dk1.7.0_02 
CGLIB錛氬拰spring2.0.6 浣跨敤鍚屾牱鐨刢glib-nodep-2.1_3.jar 
CPU錛歅8400 2.53GHz 2.53GHz 
嫻嬭瘯緇撴灉4錛?nbsp;
Create JDK Proxy: 43 ms 
Create CGLIB Proxy: 129 ms
Run JDK Proxy: 940 ms, 1,500,069 t/s
Run CGLIB Proxy: 299 ms, 4,715,937 t/s
CGLIB鍒涘緩浠g悊瀵硅薄閫熷害澶ф姣擩DK Proxy鎱?鍊嶏紝鎵ц閫熷害鏄疛DK Proxy鐨?鍊嶄互涓?/span>

鍖哄埆錛?br />濡傛灉涓涓洰鏍囧璞″鏋滃疄鐜頒簡(jiǎn)鎺ュ彛Spring鍒欎細(xì)閫夋嫨JDK鍔ㄦ佷唬鐞嗙瓥鐣ュ姩鎬佺殑鍒涘緩涓涓帴鍙e疄鐜扮被錛堝姩鎬佷唬鐞嗙被錛夋潵浠g悊鐩爣瀵硅薄錛屽彲浠ラ氫織鐨勭悊瑙h繖涓姩鎬佷唬鐞嗙被鏄洰鏍囧璞$殑鍙﹀涓涓増鏈紝鎵浠ヨ繖涓よ呬箣闂村湪寮哄埗杞崲鐨勬椂鍊欎細(xì)鎶涘嚭java.lang.ClassCastException銆傝屾墍浠ュ湪榛樿鎯呭喌涓嬶紝濡傛灉鐩爣瀵硅薄娌℃湁瀹炵幇浠諱綍鎺ュ彛錛孲pring浼?xì)閫夋嫨CGLIB浠g悊錛?鍏剁敓鎴愮殑鍔ㄦ佷唬鐞嗗璞℃槸鐩爣綾葷殑瀛愮被銆?/span>
spring 閰嶇疆瀹炵敤cglib鍔ㄦ佷唬鐞?br /> proxy-target-class 灞炴ц涓簍rue 鎴?nbsp;<aop:aspectj-autoproxy proxy-target-class="true"/>


Masen 2015-01-10 22:42 鍙戣〃璇勮
]]>
java 娉ㄨВ (杞琲nfoq.com)http://www.tkk7.com/masen/articles/422089.htmlMasenMasenTue, 06 Jan 2015 09:54:00 GMThttp://www.tkk7.com/masen/articles/422089.htmlhttp://www.tkk7.com/masen/comments/422089.htmlhttp://www.tkk7.com/masen/articles/422089.html#Feedback0http://www.tkk7.com/masen/comments/commentRss/422089.htmlhttp://www.tkk7.com/masen/services/trackbacks/422089.html鍦ㄥ紑鍙慗ava紼嬪簭錛屽挨鍏舵槸Java EE搴旂敤鐨勬椂鍊欙紝鎬繪槸鍏嶄笉浜?jiǎn)涓庡悇绉嶉厤缃枃錃g鎵撲氦閬撱備互Java EE涓吀鍨嬬殑S(pring)S(truts)H(ibernate)鏋舵瀯鏉ヨ錛?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">Spring銆?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">Struts鍜?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">Hibernate榪欎笁涓鏋墮兘鏈夎嚜宸辯殑XML鏍煎紡鐨勯厤緗枃浠躲傝繖浜涢厤緗枃浠墮渶瑕佷笌Java婧愪唬鐮佷繚瀛樺悓姝ワ紝鍚﹀垯鐨勮瘽灝卞彲鑳藉嚭鐜伴敊璇傝屼笖榪欎簺閿欒鏈夊彲鑳藉埌浜?jiǎn)杩愯鏃跺埨L墠琚彂鐜般傛妸鍚屼竴浠戒俊鎭繚瀛樺湪涓や釜鍦版柟錛屾繪槸涓潖鐨勪富鎰忋傜悊鎯崇殑鎯呭喌鏄湪涓涓湴鏂圭淮鎶よ繖浜涗俊鎭氨濂戒簡(jiǎn)銆傚叾瀹冮儴鍒嗘墍闇鐨勪俊鎭垯閫氳繃鑷姩鐨勬柟寮忔潵鐢熸垚銆侸DK 5涓紩鍏ヤ簡(jiǎn)婧愪唬鐮佷腑鐨勬敞瑙o紙annotation錛夎繖涓鏈哄埗銆傛敞瑙d嬌寰桱ava婧愪唬鐮佷腑涓嶄絾鍙互鍖呭惈鍔熻兘鎬х殑瀹炵幇浠g爜錛岃繕鍙互娣誨姞鍏冩暟鎹傛敞瑙g殑鍔熻兘綾諱技浜庝唬鐮佷腑鐨勬敞閲婏紝鎵涓嶅悓鐨勬槸娉ㄨВ涓嶆槸鎻愪緵浠g爜鍔熻兘鐨勮鏄庯紝鑰屾槸瀹炵幇紼嬪簭鍔熻兘鐨勯噸瑕佺粍鎴愰儴鍒嗐侸ava娉ㄨВ宸茬粡鍦ㄥ緢澶氭鏋朵腑寰楀埌浜?jiǎn)骞挎硾鐨勪娇鐢ㄥQ岀敤鏉ョ畝鍖栫▼搴忎腑鐨勯厤緗?/p>

浣跨敤娉ㄨВ

鍦ㄤ竴鑸殑Java寮鍙戜腑錛屾渶甯告帴瑙﹀埌鐨勫彲鑳藉氨鏄?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">@Override鍜?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">@SupressWarnings榪欎袱涓敞瑙d簡(jiǎn)銆備嬌鐢ˊOverride鐨勬椂鍊欏彧闇瑕佷竴涓畝鍗曠殑澹版槑鍗沖彲銆傝繖縐嶇О涓烘爣璁版敞瑙o紙marker annotation 錛夛紝瀹冪殑鍑虹幇灝變唬琛ㄤ簡(jiǎn)鏌愮閰嶇疆璇箟銆傝屽叾瀹冪殑娉ㄨВ鏄彲浠ユ湁鑷繁鐨勯厤緗弬鏁扮殑銆傞厤緗弬鏁頒互鍚嶅煎鐨勬柟寮忓嚭鐜般備嬌鐢?@SupressWarnings鐨勬椂鍊欓渶瑕佺被浼粿SupressWarnings({"uncheck", "unused"})榪欐牱鐨勮娉曘傚湪鎷彿閲岄潰鐨勬槸璇ユ敞瑙e彲渚涢厤緗殑鍊箋傜敱浜庤繖涓敞瑙e彧鏈変竴涓厤緗弬鏁幫紝璇ュ弬鏁扮殑鍚嶇О榛樿涓簐alue錛屽茍涓斿彲浠ョ渷鐣ャ傝岃姳鎷彿鍒欒〃紺烘槸鏁扮粍綾誨瀷銆傚湪JPA涓殑@Table娉ㄨВ浣跨敤綾諱技@Table(name = "Customer", schema = "APP")榪欐牱鐨勮娉曘備粠榪欓噷鍙互鐪嬪埌鍚嶅煎鐨勭敤娉曘傚湪浣跨敤娉ㄨВ鏃跺欑殑閰嶇疆鍙傛暟鐨勫煎繀欏繪槸緙栬瘧鏃跺埢鐨勫父閲忋?/p>

浠庢煇縐嶈搴︽潵璇達(dá)紝鍙互鎶婃敞瑙g湅鎴愭槸涓涓猉ML鍏冪礌錛岃鍏冪礌鍙互鏈変笉鍚岀殑棰勫畾涔夌殑灞炴с傝屽睘鎬х殑鍊兼槸鍙互鍦ㄥ0鏄庤鍏冪礌鐨勬椂鍊欒嚜琛屾寚瀹氱殑銆傚湪浠g爜涓嬌鐢ㄦ敞瑙o紝灝辯浉褰撲簬鎶婁竴閮ㄥ垎鍏冩暟鎹粠XML鏂囦歡縐誨埌浜?jiǎn)浠g爜鏈w箣涓紝鍦ㄤ竴涓湴鏂圭鐞嗗拰緇存姢銆?/p>

寮鍙戞敞瑙?/h2>

鍦ㄤ竴鑸殑寮鍙戜腑錛屽彧闇瑕侀氳繃闃呰鐩稿叧鐨凙PI鏂囨。鏉ヤ簡(jiǎn)瑙f瘡涓敞瑙g殑閰嶇疆鍙傛暟鐨勫惈涔夛紝騫跺湪浠g爜涓紜嬌鐢ㄥ嵆鍙傚湪鏈変簺鎯呭喌涓嬶紝鍙兘浼?xì)闇瑕佸紑鍙戣嚜宸辯殑娉ㄨВ銆傝繖鍦ㄥ簱鐨勫紑鍙戜腑姣旇緝甯歌銆傛敞瑙g殑瀹氫箟鏈夌偣綾諱技鎺ュ彛銆備笅闈㈢殑浠g爜緇欏嚭浜?jiǎn)涓涓畝鍗曠殑鎻忚堪浠g爜鍒嗗伐瀹夋帓鐨勬敞瑙c傞氳繃璇ユ敞瑙e彲浠ュ湪婧愪唬鐮佷腑璁板綍姣忎釜綾繪垨鎺ュ彛鐨勫垎宸ュ拰榪涘害鎯呭喌銆?br />

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Assignment {
    String assignee();
    int effort();
    double finished() default 0;
} 

@interface鐢ㄦ潵澹版槑涓涓敞瑙o紝鍏朵腑鐨勬瘡涓涓柟娉曞疄闄呬笂鏄0鏄庝簡(jiǎn)涓涓厤緗弬鏁般傛柟娉曠殑鍚嶇О灝辨槸鍙傛暟鐨勫悕縐幫紝榪斿洖鍊肩被鍨嬪氨鏄弬鏁扮殑綾誨瀷銆傚彲浠ラ氳繃default鏉ュ0鏄庡弬鏁扮殑榛樿鍊箋傚湪榪欓噷鍙互鐪嬪埌@Retention鍜?a style="text-decoration: none; color: #286ab2; margin: 0px; border: 0px; padding: 0px; outline: none !important;">@Target榪欐牱鐨勫厓娉ㄨВ錛岀敤鏉ュ0鏄庢敞瑙f湰韜殑琛屼負(fù)銆侤Retention鐢ㄦ潵澹版槑娉ㄨВ鐨勪繚鐣欑瓥鐣ワ紝鏈?a style="text-decoration: none; color: #286ab2; margin: 0px; border: 0px; padding: 0px; outline: none !important;">CLASS銆?a style="text-decoration: none; color: #286ab2; margin: 0px; border: 0px; padding: 0px; outline: none !important;">RUNTIME鍜?a style="text-decoration: none; color: #286ab2; margin: 0px; border: 0px; padding: 0px; outline: none !important;">SOURCE榪欎笁縐嶏紝鍒嗗埆琛ㄧず娉ㄨВ淇濆瓨鍦ㄧ被鏂囦歡銆丣VM榪愯鏃跺埢鍜屾簮浠g爜涓傚彧鏈夊綋澹版槑涓篟UNTIME鐨勬椂鍊欙紝鎵嶈兘澶熷湪榪愯鏃跺埢閫氳繃鍙嶅皠API鏉ヨ幏鍙栧埌娉ㄨВ鐨勪俊鎭侤Target鐢ㄦ潵澹版槑娉ㄨВ鍙互琚坊鍔犲湪鍝簺綾誨瀷鐨勫厓绱犱笂錛屽綾誨瀷銆佹柟娉曞拰鍩熺瓑銆?/p>

鍦ㄧ▼搴忎腑娣誨姞鐨勬敞瑙o紝鍙互鍦ㄧ紪璇戞椂鍒繪垨鏄繍琛屾椂鍒繪潵榪涜澶勭悊銆傚湪緙栬瘧鏃跺埢澶勭悊鐨勬椂鍊欙紝鏄垎鎴愬瓚熸潵榪涜鐨勩傚鏋滃湪鏌愯稛澶勭悊涓駭鐢熶簡(jiǎn)鏂扮殑Java婧愭枃浠訛紝閭d箞灝遍渶瑕佸彟澶栦竴瓚熷鐞嗘潵澶勭悊鏂扮敓鎴愮殑婧愭枃浠躲傚姝ゅ線澶嶏紝鐩村埌娌℃湁鏂版枃浠惰鐢熸垚涓烘銆傚湪瀹屾垚澶勭悊涔嬪悗錛屽啀瀵笿ava浠g爜榪涜緙栬瘧銆侸DK 5涓彁渚涗簡(jiǎn)apt宸ュ叿鐢ㄦ潵瀵規(guī)敞瑙h繘琛屽鐞嗐俛pt鏄竴涓懡浠よ宸ュ叿錛屼笌涔嬮厤濂楃殑榪樻湁涓濂楃敤鏉ユ弿榪扮▼搴忚涔夌粨鏋勭殑Mirror API銆侻irror API錛坈om.sun.mirror.*錛夋弿榪扮殑鏄▼搴忓湪緙栬瘧鏃跺埢鐨勯潤(rùn)鎬佺粨鏋勩傞氳繃Mirror API鍙互鑾峰彇鍒拌娉ㄨВ鐨凧ava綾誨瀷鍏冪礌鐨勪俊鎭紝浠庤屾彁渚涚浉搴旂殑澶勭悊閫昏緫銆傚叿浣撶殑澶勭悊宸ヤ綔浜ょ粰apt宸ュ叿鏉ュ畬鎴愩傜紪鍐欐敞瑙e鐞嗗櫒鐨勬牳蹇?jī)鏄?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">AnnotationProcessorFactory鍜?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">AnnotationProcessor涓や釜鎺ュ彛銆傚悗鑰呰〃紺虹殑鏄敞瑙e鐞嗗櫒錛岃屽墠鑰呭垯鏄負(fù)鏌愪簺娉ㄨВ綾誨瀷鍒涘緩娉ㄨВ澶勭悊鍣ㄧ殑宸ュ巶銆?/p>

浠ヤ笂闈㈢殑娉ㄨВAssignment涓轟緥錛屽綋姣忎釜寮鍙戜漢鍛橀兘鍦ㄦ簮浠g爜涓洿鏂拌繘搴︾殑璇濓紝灝卞彲浠ラ氳繃涓涓敞瑙e鐞嗗櫒鏉ョ敓鎴愪竴涓」鐩暣浣撹繘搴︾殑鎶ュ憡銆?棣栧厛鏄敞瑙e鐞嗗櫒宸ュ巶鐨勫疄鐜般?br />

public class AssignmentApf implements AnnotationProcessorFactory {  
    public AnnotationProcessor getProcessorFor(Set<AnnotationTypeDeclaration> atds,? AnnotationProcessorEnvironment env) {
        if (atds.isEmpty()) {
           return AnnotationProcessors.NO_OP;
        }
        return new AssignmentAp(env); //榪斿洖娉ㄨВ澶勭悊鍣?
    } 
    public Collection<String> supportedAnnotationTypes() {
        return Collections.unmodifiableList(Arrays.asList("annotation.Assignment"));
    }
    public Collection<String> supportedOptions() {
        return Collections.emptySet();
    }
}


 

AnnotationProcessorFactory鎺ュ彛鏈変笁涓柟娉曪細(xì)getProcessorFor鏄牴鎹敞瑙g殑綾誨瀷鏉ヨ繑鍥炵壒瀹氱殑娉ㄨВ澶勭悊鍣紱supportedAnnotationTypes鏄繑鍥炶宸ュ巶鐢熸垚鐨勬敞瑙e鐞嗗櫒鎵鑳芥敮鎸佺殑娉ㄨВ綾誨瀷錛泂upportedOptions鐢ㄦ潵琛ㄧず鎵鏀寔鐨勯檮鍔犻夐」銆傚湪榪愯apt鍛戒護(hù)琛屽伐鍏風(fēng)殑鏃跺欙紝鍙互閫氳繃-A鏉ヤ紶閫掗澶栫殑鍙傛暟緇欐敞瑙e鐞嗗櫒錛屽-Averbose=true銆傚綋宸ュ巶閫氳繃 supportedOptions鏂規(guī)硶澹版槑浜?jiǎn)鎵鑳借瘑鍒殑闄勫姞閫夐」涔嬪悗錛屾敞瑙e鐞嗗櫒灝卞彲浠ュ湪榪愯鏃跺埢閫氳繃AnnotationProcessorEnvironment鐨刧etOptions鏂規(guī)硶鑾峰彇鍒伴夐」鐨勫疄闄呭箋傛敞瑙e鐞嗗櫒鏈韓鐨勫熀鏈疄鐜板涓嬫墍紺恒?br />

public class AssignmentAp implements AnnotationProcessor { 
    private AnnotationProcessorEnvironment env;
    private AnnotationTypeDeclaration assignmentDeclaration;
    public AssignmentAp(AnnotationProcessorEnvironment env) {
        this.env = env;
        assignmentDeclaration = (AnnotationTypeDeclaration) env.getTypeDeclaration("annotation.Assignment");
    }
    public void process() {
        Collection<Declaration> declarations = env.getDeclarationsAnnotatedWith(assignmentDeclaration);
        for (Declaration declaration : declarations) {
           processAssignmentAnnotations(declaration);
        }
    }
    private void processAssignmentAnnotations(Declaration declaration) {
        Collection<AnnotationMirror> annotations = declaration.getAnnotationMirrors();
        for (AnnotationMirror mirror : annotations) {
            if (mirror.getAnnotationType().getDeclaration().equals(assignmentDeclaration)) {
                Map<AnnotationTypeElementDeclaration, AnnotationValue> values = mirror.getElementValues();
                String assignee = (String) getAnnotationValue(values, "assignee"); //鑾峰彇娉ㄨВ鐨勫?
            }
        }
    }   
} 



娉ㄨВ澶勭悊鍣ㄧ殑澶勭悊閫昏緫閮藉湪process鏂規(guī)硶涓畬鎴愩傞氳繃涓涓0鏄庯紙Declaration錛夌殑getAnnotationMirrors鏂規(guī)硶灝卞彲浠ヨ幏鍙栧埌璇ュ0鏄庝笂鎵娣誨姞鐨勬敞瑙g殑瀹為檯鍊箋傚緱鍒拌繖浜涘間箣鍚庯紝澶勭悊璧鋒潵灝變笉闅句簡(jiǎn)銆?/p>

鍦ㄥ垱寤哄ソ娉ㄨВ澶勭悊鍣ㄤ箣鍚庯紝灝卞彲浠ラ氳繃apt鍛戒護(hù)琛屽伐鍏鋒潵瀵規(guī)簮浠g爜涓殑娉ㄨВ榪涜澶勭悊銆?鍛戒護(hù)鐨勮繍琛屾牸寮忔槸apt -classpath bin -factory annotation.apt.AssignmentApf src/annotation/work/*.java錛屽嵆閫氳繃-factory鏉ユ寚瀹氭敞瑙e鐞嗗櫒宸ュ巶綾葷殑鍚嶇О銆傚疄闄呬笂錛宎pt宸ュ叿鍦ㄥ畬鎴愬鐞嗕箣鍚庯紝浼?xì)鑷姩璋冪敤javac鏉ョ紪璇戝鐞嗗畬鎴愬悗鐨勬簮浠g爜銆?/p>

JDK 5涓殑apt宸ュ叿鐨勪笉瓚充箣澶勫湪浜庡畠鏄疧racle鎻愪緵鐨勭鏈夊疄鐜般傚湪JDK 6涓紝閫氳繃JSR 269鎶婅嚜瀹氫箟娉ㄨВ澶勭悊鍣ㄨ繖涓鍔熻兘榪涜浜?jiǎn)瑙勮寖鍖栧Q屾湁浜?jiǎn)鏂扮?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">javax.annotation.processing榪欎釜鏂扮殑API銆傚Mirror API涔熻繘琛屼簡(jiǎn)鏇存柊錛屽艦鎴愪簡(jiǎn)鏂扮殑javax.lang.model鍖呫傛敞瑙e鐞嗗櫒鐨勪嬌鐢ㄤ篃榪涜浜?jiǎn)绠鍖栵紝涓嶉渶瑕佸啀鍗曠嫭榪愯apt榪欐牱鐨勫懡浠よ宸ュ叿錛孞ava緙栬瘧鍣ㄦ湰韜氨鍙互瀹屾垚瀵規(guī)敞瑙g殑澶勭悊銆傚浜庡悓鏍風(fēng)殑鍔熻兘錛屽鏋滅敤JSR 269鐨勫仛娉曪紝鍙渶瑕佷竴涓被灝卞彲浠ヤ簡(jiǎn)銆?br />

@SupportedSourceVersion(SourceVersion.RELEASE_6)
@SupportedAnnotationTypes("annotation.Assignment")
public class AssignmentProcess extends AbstractProcessor {
    private TypeElement assignmentElement; 
    public synchronized void init(ProcessingEnvironment processingEnv) {
        super.init(processingEnv);
        Elements elementUtils = processingEnv.getElementUtils();
        assignmentElement = elementUtils.getTypeElement("annotation.Assignment");
    } 
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(assignmentElement);
        for (Element element : elements) {
            processAssignment(element);
        }
    }
    private void processAssignment(Element element) {
        List<? extends AnnotationMirror> annotations = element.getAnnotationMirrors();
        for (AnnotationMirror mirror : annotations) {
            if (mirror.getAnnotationType().asElement().equals(assignmentElement)) {
                Map<? extends ExecutableElement, ? extends AnnotationValue> values = mirror.getElementValues();
                String assignee = (String) getAnnotationValue(values, "assignee"); //鑾峰彇娉ㄨВ鐨勫?
            }
        }
    } 
} 



浠旂粏姣旇緝涓婇潰涓ゆ浠g爜錛屽彲浠ュ彂鐜板畠浠殑鍩烘湰緇撴瀯鏄被浼肩殑銆備笉鍚屼箣澶勫湪浜嶫DK 6涓氳繃鍏冩敞瑙?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">@SupportedAnnotationTypes鏉ュ0鏄庢墍鏀寔鐨勬敞瑙g被鍨嬨傚彟澶栨弿榪扮▼搴忛潤(rùn)鎬佺粨鏋勭殑javax.lang.model鍖呬嬌鐢ㄤ簡(jiǎn)涓嶅悓鐨勭被鍨嬪悕縐般備嬌鐢ㄧ殑鏃跺欎篃鏇村姞綆鍗曪紝鍙渶瑕侀氳繃javac -processor annotation.pap.AssignmentProcess Demo1.java榪欐牱鐨勬柟寮忓嵆鍙?/p>

涓婇潰浠嬬粛鐨勮繖涓ょ鍋氭硶閮芥槸鍦ㄧ紪璇戞椂鍒昏繘琛屽鐞嗙殑銆傝屾湁浜涙椂鍊欏垯闇瑕佸湪榪愯鏃跺埢鏉ュ畬鎴愬娉ㄨВ鐨勫鐞嗐傝繖涓椂鍊欏氨闇瑕佺敤鍒癑ava鐨勫弽灝凙PI銆傚弽灝凙PI鎻愪緵浜?jiǎn)鍦q愯鏃跺埢璇誨彇娉ㄨВ淇℃伅鐨勬敮鎸併備笉榪囧墠鎻愭槸娉ㄨВ鐨勪繚鐣欑瓥鐣ュ0鏄庣殑鏄繍琛屾椂銆侸ava鍙嶅皠API鐨?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">AnnotatedElement鎺ュ彛鎻愪緵浜?jiǎn)鑾峰彇绫汇佹柟娉曞拰鍩熶笂鐨勬敞瑙g殑瀹炵敤鏂規(guī)硶銆傛瘮濡傝幏鍙栧埌涓涓狢lass綾誨璞′箣鍚庯紝閫氳繃getAnnotation鏂規(guī)硶灝卞彲浠ヨ幏鍙栧埌璇ョ被涓婃坊鍔犵殑鎸囧畾娉ㄨВ綾誨瀷鐨勬敞瑙c?/p>

瀹炰緥鍒嗘瀽

涓嬮潰閫氳繃涓涓叿浣撶殑瀹炰緥鏉ュ垎鏋愯鏄庡湪瀹炶返涓浣曟潵浣跨敤鍜屽鐞嗘敞瑙c傚亣瀹氭湁涓涓叕鍙哥殑闆囧憳淇℃伅緋葷粺錛屼粠璁塊棶鎺у埗鐨勮搴﹀嚭鍙戯紝瀵歸泧鍛樼殑宸ヨ祫鐨勬洿鏂板彧鑳界敱鍏鋒湁鐗瑰畾瑙掕壊鐨勭敤鎴鋒墠鑳藉畬鎴愩傝冭檻鍒拌闂帶鍒墮渶姹傜殑鏅亶鎬э紝鍙互瀹氫箟涓涓敞瑙f潵璁╁紑鍙戜漢鍛樻柟渚跨殑鍦ㄤ唬鐮佷腑澹版槑璁塊棶鎺у埗鏉冮檺銆?br />
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequiredRoles
{ String[] value(); } 

涓嬩竴姝ュ垯鏄浣曞娉ㄨВ榪涜澶勭悊錛岃繖閲屼嬌鐢ㄧ殑Java鐨勫弽灝凙PI騫剁粨鍚?a style="text-decoration: none; color: #286ab2; outline: none !important; margin: 0px; border: 0px; padding: 0px;">鍔ㄦ佷唬鐞?/a>銆備笅闈㈡槸鍔ㄦ佷唬鐞嗕腑鐨処nvocationHandler鎺ュ彛鐨勫疄鐜般?br />

public class AccessInvocationHandler<T> implements InvocationHandler {
    final T accessObj;
    public AccessInvocationHandler(T accessObj) {
        this.accessObj = accessObj;
    }
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        RequiredRoles annotation = method.getAnnotation(RequiredRoles.class); //閫氳繃鍙嶅皠API鑾峰彇娉ㄨВ
        if (annotation != null) {
            String[] roles = annotation.value();
            String role = AccessControl.getCurrentRole();
            if (!Arrays.asList(roles).contains(role)) {
                throw new AccessControlException("The user is not allowed to invoke this method.");
            }
        }
        return method.invoke(accessObj, args);
    } 
}


鍦ㄥ叿浣撲嬌鐢ㄧ殑鏃跺欙紝棣栧厛瑕侀氳繃Proxy.newProxyInstance鏂規(guī)硶鍒涘緩涓涓狤mployeeGateway鐨勬帴鍙g殑浠g悊綾伙紝浣跨敤璇ヤ唬鐞嗙被鏉ュ畬鎴愬疄闄呯殑鎿嶄綔銆?/p>

Masen 2015-01-06 17:54 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 岛国av无码免费无禁网站| 国产亚洲精品福利在线无卡一| 日本妇人成熟免费中文字幕| 亚洲欧洲日产韩国在线| 色www永久免费视频| 黄页网站在线免费观看| 亚洲成人激情在线| 在线观看人成视频免费| 一级做a爰片性色毛片免费网站| 最近最新MV在线观看免费高清| 亚洲大尺度无码专区尤物| 日本阿v免费费视频完整版| 看亚洲a级一级毛片| 亚洲av午夜福利精品一区| 性一交一乱一视频免费看| GOGOGO高清免费看韩国| 亚洲人成电影网站久久| 亚洲av无码精品网站| 国产精品色午夜免费视频| 91福利视频免费观看| 又大又硬又粗又黄的视频免费看| 免费A级毛片无码A| 亚洲黄色片免费看| 成人无码精品1区2区3区免费看 | 国产v精品成人免费视频400条| 亚洲黄色在线观看视频| 亚洲国产精品13p| 一个人在线观看视频免费| 香蕉免费一级视频在线观看| 91在线亚洲综合在线| 久久精品国产99精品国产亚洲性色| 久久www免费人成精品香蕉| 国产精品亚洲自在线播放页码| 免费无码黄十八禁网站在线观看| 最新亚洲卡一卡二卡三新区| 久久亚洲精品无码| 亚洲AⅤ永久无码精品AA| 国内精品乱码卡1卡2卡3免费| 激情综合亚洲色婷婷五月| 亚洲av无码成h人动漫无遮挡 | 国产亚洲午夜高清国产拍精品|