<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
    主站蜘蛛池模板: 中文字幕免费在线看线人| 日韩a毛片免费观看| 日本免费在线中文字幕| 在线观看亚洲天天一三视| 免费人成再在线观看网站| 久久久久久A亚洲欧洲AV冫| a级毛片免费网站| 在线播放亚洲第一字幕| 最近中文字幕大全免费版在线 | 日本二区免费一片黄2019| 亚洲中文字幕日本无线码| 成人a视频片在线观看免费| 亚洲精品无码久久久久YW| 免费A级毛片无码久久版| 暖暖免费中文在线日本| 亚洲中文字幕无码一久久区| 中文字幕在线视频免费| 亚洲天天在线日亚洲洲精| 亚洲免费观看在线视频| 亚洲综合偷自成人网第页色 | 亚洲日韩中文无码久久| 国产在线精品观看免费观看| 亚洲国产老鸭窝一区二区三区| 日韩av无码久久精品免费| 亚洲综合久久一本伊伊区| 国产国产人免费视频成69大陆| 九九免费久久这里有精品23| 久久亚洲精品无码AV红樱桃| 天天操夜夜操免费视频| 一级**爱片免费视频| 亚洲AV本道一区二区三区四区| 国拍在线精品视频免费观看| 黄色毛片免费观看| 亚洲国产美国国产综合一区二区 | 又爽又黄无遮挡高清免费视频 | 国产区在线免费观看| 亚洲黄色片免费看| 国产免费av片在线播放| 国产精品免费大片| 午夜亚洲国产理论片二级港台二级| 亚洲伊人久久大香线蕉综合图片|