<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
    主站蜘蛛池模板: 亚洲欧洲日产国码在线观看| 亚洲婷婷天堂在线综合| 在线观看片免费人成视频无码| 久久久久亚洲AV成人无码网站| 在线观看AV片永久免费| 日韩亚洲人成在线综合| 国产成人A人亚洲精品无码| 毛片a级毛片免费观看免下载| 一个人看的hd免费视频| 亚洲人成网站在线观看播放动漫 | 九九九精品成人免费视频| 日日狠狠久久偷偷色综合免费| 亚洲国产精品无码久久久不卡| 中文字幕影片免费在线观看| 4hu四虎免费影院www| 亚洲国产综合人成综合网站00| 亚洲精品视频久久久| 日韩版码免费福利视频| www在线观看播放免费视频日本| 亚洲国产成a人v在线| 亚洲一区二区三区在线观看精品中文| 99视频全部免费精品全部四虎| 一级特黄a免费大片| 亚洲制服丝袜中文字幕| 亚洲线精品一区二区三区| 国语成本人片免费av无码| 青柠影视在线观看免费| 污视频网站免费在线观看| 亚洲专区一路线二| 亚洲AV无码乱码国产麻豆穿越| 亚洲?V乱码久久精品蜜桃| 四虎影视免费在线| 国产免费看JIZZ视频| 国产精品99精品久久免费| 一级毛片大全免费播放| 亚洲AV无码一区二区三区网址| 亚洲精品午夜在线观看| 亚洲AV无码一区二区二三区入口| 亚洲A∨午夜成人片精品网站| 国产美女在线精品免费观看| 一区二区三区观看免费中文视频在线播放 |