<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 柳隨風 閱讀(2054) 評論(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片| 亚洲欧洲日韩不卡| 国产区图片区小说区亚洲区| 成年女人色毛片免费看| 亚洲精品午夜国产va久久| 免费精品国产日韩热久久| 亚洲激情黄色小说| 中文字幕影片免费在线观看| 一本色道久久综合亚洲精品蜜桃冫| 无码专区永久免费AV网站| 亚洲综合成人婷婷五月网址| 噜噜嘿在线视频免费观看| 国产精品亚洲lv粉色| 亚洲中久无码不卡永久在线观看| 久久高潮一级毛片免费| 亚洲AV无码AV男人的天堂| 国产免费女女脚奴视频网| 亚洲一线产品二线产品| 免费观看国产精品| 一个人晚上在线观看的免费视频 | 久久精品国产亚洲av麻豆小说 | 国产好大好硬好爽免费不卡| 亚洲天堂一区二区| 黄色成人网站免费无码av| 美女无遮挡免费视频网站| 国产成人A亚洲精V品无码 | 无码AV片在线观看免费| 亚洲一级视频在线观看| 无码免费午夜福利片在线| 美女被免费视频网站| 亚洲av无码专区国产乱码在线观看| 99视频免费观看| 亚洲heyzo专区无码综合| 亚洲一区二区三区免费| 91短视频在线免费观看| jizzjizz亚洲日本少妇| 亚洲av无码精品网站| 韩国18福利视频免费观看| 和老外3p爽粗大免费视频| 亚洲国产中文在线二区三区免| 国产yw855.c免费视频|