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

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

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

    beauty_beast

    上善若水 厚德載物

    反射之私有構造函數、屬性、方法

    Posted on 2006-05-15 18:35 柳隨風 閱讀(2044) 評論(2)  編輯  收藏 所屬分類: java基礎

    我一直以為類的私有構造函數、屬性、方法除了類自身其他類是無法訪問的,前幾天正好學習Spring框架,在學習Spring框架基礎?Bean包時,寫了一個簡單的例子,類似如下:

    package ?study.spring.bean;

    public ? class ?SimpleBean
    {
    ????
    private ?String?beanName;
    ????
    ????
    ????
    private ?SimpleBean() {
    ????????System.out.println(
    " SimpleBean? " );
    ??????
    ????}


    ????
    /**
    ?????*?
    @return ?Returns?the?beanName.
    ?????
    */

    ????
    public ?String?getBeanName()
    ????
    {
    ????????
    return ?beanName;
    ????}


    ????
    /**
    ?????*?
    @param ?beanName?The?beanName?to?set.
    ?????
    */

    ????
    public ? void ?setBeanName(String?beanName)
    ????
    {
    ????????
    this .beanName? = ?beanName;
    ????}


    }


    發現居然也能調用成功,當時很驚訝,反射機制平時在以前的項目中也常使用,但不能構造只有私有構造函數的類。
    自己做了一個簡單例子:
    package?study.spring.bean;

    import?java.lang.reflect.Constructor;
    import?java.lang.reflect.InvocationTargetException;
    public?class?SimpleTest
    {

    ????
    /**
    ?????*?
    @param?args
    ?????
    */

    ????
    public?static?void?main(String[]?args)
    ????
    {
    ????????
    //?TODO?Auto-generated?method?stub
    ????????try
    ????????
    {
    ????????????Constructor[]?cts
    =Class.forName("study.spring.bean.SimpleBean").getDeclaredConstructors();
    ????????????
    for(int?i=0;i<cts.length;i++){
    ????????????????cts[i].newInstance(
    null);
    ????????????????
    ????????????????
    ????????????}

    ??????????
    ????????}

    ????????
    catch?(SecurityException?e)
    ????????
    {
    ????????????
    //?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}

    ????????
    catch?(ClassNotFoundException?e)
    ????????
    {
    ????????????
    //?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}

    ????????
    catch?(IllegalArgumentException?e)
    ????????
    {
    ????????????
    //?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}

    ????????
    catch?(InstantiationException?e)
    ????????
    {
    ????????????
    //?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}

    ????????
    catch?(IllegalAccessException?e)
    ????????
    {
    ????????????
    //?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}

    ????????
    catch?(InvocationTargetException?e)
    ????????
    {
    ????????????
    //?TODO?Auto-generated?catch?block
    ????????????e.printStackTrace();
    ????????}

    ???????

    ????}


    }


    也是如我所想 拋出java.lang.IllegalAccessException異常,當時就懷疑Spring框架是否使用反射的一些特性,后來查了相關文檔才知道原因何在:

    實際上java在反射創建一個類的實例時,默認會檢測是否符合相關安全,該檢測開關可以關閉。
    Constructor、Field、Method都是繼承于AccessibleObject,對應實例調用setAccessible(true)就關閉該開關
    如上面的例子,在代碼?cts[i].newInstance(null);行前調用上述方法:? cts[i].setAccessible(true);
    這樣就可以創建只有構造函數的實例、調用私有構造方法,訪問類的私有屬性。

    呵呵,這樣好像java安全性就大大降低.如果你非常注重應用的安全性,java當然考慮到這方面,你可以在JVM啟動參數增加 -Djava.security.manager 啟用安全管理器,如果有該參數,它將檢測正在關閉接入檢測的代碼是否許可了這樣做,上述代碼執行時會拋出java.security.AccessControlException異常。

    篇外話:
    ??????????? 對java 安全性方面了解不多,實際開發中也很少與之相關,如哪位同行有相關經驗,請多多指教,謝謝!




    Feedback

    # re: 反射之私有構造函數、屬性、方法  回復  更多評論   

    2007-04-20 13:42 by hackest
    謝謝
    寫得不錯!
    強!

    # re: 反射之私有構造函數、屬性、方法[未登錄]  回復  更多評論   

    2007-07-30 16:24 by king
    niu up
    主站蜘蛛池模板: 亚洲国产精品一区二区成人片国内| 成人免费777777| 亚洲av永久无码精品秋霞电影影院| 青青免费在线视频| 日韩a级毛片免费观看| 亚洲丁香婷婷综合久久| 日本人护士免费xxxx视频| 亚洲国产精品自在自线观看| 毛片免费全部免费观看| 亚洲熟女精品中文字幕| 久久久久久久免费视频| 亚洲国产成人久久精品app| 97视频免费在线| 亚洲国产日韩综合久久精品| 拨牐拨牐x8免费| 亚洲中文字幕久在线| 成人在线免费看片| 亚洲最大中文字幕无码网站 | 免费一级毛片免费播放| 男女交性无遮挡免费视频| 亚洲一区二区三区无码影院| 中国国语毛片免费观看视频| 亚洲综合视频在线| 四虎免费大片aⅴ入口| 日韩在线一区二区三区免费视频 | 最近2019中文字幕免费直播| 亚洲国产模特在线播放| 国产一级做a爱免费视频| 中国极品美軳免费观看| 亚洲嫩模在线观看| 女性无套免费网站在线看| 国产成人自产拍免费视频| 久久精品国产亚洲av麻豆| 日本免费网址大全在线观看| 在线观看亚洲免费| 色久悠悠婷婷综合在线亚洲| 亚洲成年人免费网站| 免费在线观看一区| 91亚洲精品视频| 日本中文一区二区三区亚洲| 久久国产精品免费观看|