<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 柳隨風 閱讀(2053) 評論(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
    主站蜘蛛池模板: 日韩精品无码专区免费播放| 四虎成人精品国产永久免费无码| 99re免费99re在线视频手机版| 亚洲人成电影在线播放| 丰满亚洲大尺度无码无码专线 | 中国在线观看免费高清完整版| 亚洲AV日韩AV高潮无码专区| 国产午夜精品免费一区二区三区 | 日本高清免费不卡在线| 色在线亚洲视频www| 成人毛片免费观看视频在线| 亚洲日韩中文字幕一区| 午夜小视频免费观看| 白白色免费在线视频| 亚洲日韩国产一区二区三区| 巨胸喷奶水www永久免费| 国内精品久久久久久久亚洲| a在线免费观看视频| 亚洲视频在线免费观看| 在线观看日本免费a∨视频| 亚洲综合偷自成人网第页色| 日韩视频免费一区二区三区| 一级女性全黄久久生活片免费| 亚洲精品美女久久777777| 88xx成人永久免费观看| 亚洲国产成人99精品激情在线| 成人激情免费视频| 人妻仑乱A级毛片免费看| 亚洲AV色香蕉一区二区| 国产大片线上免费观看| 国产精品久久久久久亚洲小说| 久久青青草原亚洲av无码| 一级毛片免费播放| 亚洲精品美女久久7777777| 免费人成网站在线高清| 久久国产精品免费网站| 亚洲精品无码久久| 亚洲乱码无码永久不卡在线 | 三级片免费观看久久| 亚洲免费在线视频| 国产精品久免费的黄网站|