一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

[Java]Annotation元數(shù)據(jù)的幾個(gè)應(yīng)用

 zybingliu 2007-08-30
Tiger出籠以后, Annotation成了一個(gè)小小的亮點(diǎn),雖然有抄襲.net之嫌疑,畢竟讓Java開(kāi)發(fā)者方便了許多。EJB3.0和Hibernate Annotation版都是基于這個(gè)東西了。

下面是結(jié)合Spring的自動(dòng)Log/鑒權(quán)/國(guó)際化應(yīng)用:

public interface SessionService extends Service {
    @Anonymous 
//允許未登錄用戶調(diào)用
    @OperationLog //自動(dòng)log
    @Name(zh = "登錄")
    
public String login(
            @Name(en
="user",zh = "用戶")String user, 
            @OperationLog(
false)String password); //不log密碼

    @OperationLog
    @Name(zh
="注銷")
    
public void logout();

@Anonymous用于鑒權(quán),允許匿名訪問(wèn)。通過(guò)ThreadLocal的變量保存當(dāng)前用戶的Session信息。
@OperationLog 用于標(biāo)記是否自動(dòng)Log, 可以作用于類、方法、參數(shù)
@Name 用于i18n國(guó)際化支持。Java里面常見(jiàn)的國(guó)際化解決方法是.properties文件,個(gè)人認(rèn)為這個(gè)方案不好,適合大型項(xiàng)目開(kāi)發(fā)。小項(xiàng)目中這個(gè)標(biāo)記一 下足矣。如果要添加一種語(yǔ)言,只要在@Name中多一個(gè)參數(shù),利用Eclipse的reference很容易知道有哪些地方要翻譯。

同樣@Name還可以加在Bean上,自動(dòng)構(gòu)造多語(yǔ)言的Table/List,方便之極。
@Name(zh="安全事件",en="Security Event")
public class SecurityEvent extends AbstractEmsEvent{
    String cause;
    @Name(zh
="原因")
    
public String getCause() {
        
return cause;
    }

    
}

附上我的I18nUtil工具類:
/**
 * @author steeven
 
*/

public class I18nUtil {
    
public static String getName(Method method) {
        
return getI18n(method,Name.class);
    }

    
public static String getTip(Method method) {
        
return getI18n(method,Tip.class);
    }

    
public static String getI18n(Method method,Class<? extends Annotation> i18nClass) {
        Annotation i18n 
= method.getAnnotation(i18nClass);
        
return getProperty(i18n,method.getName());
    }

    
    
public static String getProperty(Annotation i18n, String defaultValue) {
        
if (i18n==null)
            
return defaultValue;
        Class
<? extends Annotation> clz = i18n.annotationType();
        
try {
            Method method 
= clz.getMethod(getI18nMethodName());
            assert method
!=null;
            String r 
= (String) method.invoke(i18n);
            
return r==null || r.length()==0?defaultValue:r;
        }
 catch (Exception e) {
            assert 
false;
            
return defaultValue;
        }

    }

    
    
private static String getI18nMethodName() {
        
return Locale.getDefault().getLanguage();
    }

    
    @SuppressWarnings(
"unchecked")
    
public static <T extends Annotation> T getAnnotation(Annotation[] argAnnotations, Class<T> clz) {
        
for(Annotation anno:argAnnotations)
            
if (clz.isInstance(anno))
                
return (T) anno;
        
return null;
    }

}

元數(shù)據(jù)的結(jié)構(gòu)似乎有些簡(jiǎn)單,有時(shí)候要加很多@Name,@Tip,@Help好像沒(méi)辦法一個(gè)Tag搞定。

另外,還可以通過(guò)Annotation加上驗(yàn)證、輸入界面描述,等等。程序很容易自動(dòng)化,再多的畫(huà)面也用不了多少代碼。

Jdk5.0提供了這么好用的原數(shù)據(jù)機(jī)制,你有什么好的用法呢?

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    狠狠干狠狠操在线播放| 一本色道久久综合狠狠躁| 超碰在线播放国产精品| 99久久精品午夜一区二区| 日韩精品一级片免费看| 欧美综合色婷婷欧美激情| 嫩呦国产一区二区三区av| 欧美日本道一区二区三区| 亚洲高清欧美中文字幕| 欧美大胆美女a级视频| 欧美日韩国产综合特黄| 国产美女精品人人做人人爽| 国产原创激情一区二区三区| 亚洲精品欧美精品一区三区| 欧美性欧美一区二区三区| 国产精品一区日韩欧美| 亚洲欧美日韩国产成人| 日本不卡在线一区二区三区| 五月激情婷婷丁香六月网| 国产精品福利一级久久| 激情图日韩精品中文字幕| 日本高清一区免费不卡| 九七人妻一区二区三区| 欧美日本精品视频在线观看 | 国产又大又黄又粗又免费| 亚洲av熟女国产一区二区三区站| 老司机精品在线你懂的| 欧洲自拍偷拍一区二区| 欧美日韩国产精品自在自线| 粉嫩一区二区三区粉嫩视频| 香蕉久久夜色精品国产尤物| 熟妇久久人妻中文字幕| 九九热精彩视频在线免费| 人妻亚洲一区二区三区| 亚洲日本韩国一区二区三区| 国产精品久久三级精品| 91亚洲熟女少妇在线观看| 国产成人精品资源在线观看| 国产欧美日韩在线一区二区| 国产综合欧美日韩在线精品 | 91久久精品中文内射|