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

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

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

    探索與發現

    研究java技術

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      83 隨筆 :: 0 文章 :: 109 評論 :: 0 Trackbacks

    對于面向接口編程的項目免不了要一反射相接觸,動態得到實例:
    public interface a {
    ?public void sayHello();
    }
    ---------------------------
    第一種情況是當
    aImpl實現類為默認的構造方法:
    根據類名aImpl動態得到實例
    Class c=Class.forName("aImpl");
    a instance=(a)c.newInstance();
    a.sayHello();
    ------------
    第二種情況當
    aImpl為帶參數的構造方法時:
    Class o=Class.forName("aImpl");//aImpl為要實例化的例名,可以從配置文件當中獲取
    ???Constructor cous = null;
    ???cous=o.getConstructor(new Class[]{String.class});//構造器的參數類型
    ???a ao=(a) cous.newInstance(new Object[]{"xxx"});//"xxx為傳入的參數值
    ???ao.sayHello();
    第三種就是構造器為私有的時候,我們通過方法獲取實例getInstance()(自己定的)
    Class o=Class.forName("aImpl");
    ???Method method=o.getMethod("getInstance",new Class[]{String.class});
    //getInstance為返回為aImpl實例的方法名
    ??? a ao=(a) method.invoke(null,new Object[]{"xxx"});//注意了前面的參數為null,是有
    //條件的,就是要求getInstance為static類型的,我想大家都會這樣設計的
    ?????? ao.sayHello();
    做連接池的話,一種方式就是使用動態代理類,當Connection調用close()方法時,我們可以利用方法攔截器,在調用close方法的時候把連接放到緩存里面去,供以后再次利用..
    a ao=(a)Proxy.newProxyInstance(aImpl.class.getClassLoader(),aImpl.class.getInterfaces(),
    ?????new InvocationHandler()
    ?????{

    ??????public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    ???????Object re=null;
    ???????System.out.println("before--------"+method.getName());
    //在這里我們添加自己的一些處理方法,如把連接放到緩存去撒!
    ???????//re=method.invoke(new aImpl(),args);
    ???????return re;
    ??????}
    ????
    ?????});
    ???ao.sayHello();

    posted on 2006-07-15 22:00 蜘蛛 閱讀(3352) 評論(1)  編輯  收藏 所屬分類: java

    評論

    # re: java利用反射得到實例,和代理類proxy 2007-09-25 06:30 javazhai
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Event;
    import org.eclipse.swt.widgets.Listener;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Tree;
    import org.eclipse.swt.widgets.TreeItem;

    public class Snippet61 {

    public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
    for (int i = 0; i < 4; i++) {
    TreeItem item0 = new TreeItem(tree, 0);
    item0.setText("Item " + i);
    for (int j = 0; j < 4; j++) {
    TreeItem item1 = new TreeItem(item0, 0);
    item1.setText("SubItem " + i + " " + j);
    for (int k = 0; k < 4; k++) {
    TreeItem item2 = new TreeItem(item1, 0);
    item2.setText("SubItem " + i + " " + j + " " + k);
    }
    }
    }
    tree.setBounds(0, 0, 100, 100);
    tree.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event e) {
    String string = "";
    TreeItem[] selection = tree.getSelection();
    if(selection!=null&&selection.length>0)
    expandOrCollapse(selection[0]);
    for (int i = 0; i < selection.length; i++)
    string += selection[i] + " ";
    System.out.println("Selection={" + string + "}");
    }
    });
    tree.addListener(SWT.DefaultSelection, new Listener() {
    public void handleEvent(Event e) {
    String string = "";
    TreeItem[] selection = tree.getSelection();
    for (int i = 0; i < selection.length; i++)
    string += selection[i] + " ";
    System.out.println("DefaultSelection={" + string + "}");
    }
    });
    tree.addListener(SWT.Expand, new Listener() {
    public void handleEvent(Event e) {
    System.out.println("Expand={" + e.item + "}");
    }
    });
    tree.addListener(SWT.Collapse, new Listener() {
    public void handleEvent(Event e) {
    System.out.println("Collapse={" + e.item + "}");
    }
    });
    tree.getItems()[0].setExpanded(true);
    tree.getItems()[0].getItems()[0].setExpanded(true);
    tree.getItems()[0].getItems()[0].setText("ttttt");
    tree.setSelection(tree.getItems()[0].getItems()[1]);
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
    display.sleep();
    }
    display.dispose();
    }

    public static void expandOrCollapse(TreeItem treeItem) {
    boolean isExpanded=treeItem.getExpanded();
    treeItem.setExpanded(!isExpanded);
    // TreeItem[] selection = treeItem.getItems();
    // if (treeItem != null && selection.length > 0)
    // expandOrCollapse(selection[0]);
    }
    }  回復  更多評論
      

    主站蜘蛛池模板: 成人无码区免费视频观看| 男人的天堂网免费网站 | 97在线视频免费| 亚洲AV本道一区二区三区四区| 中国极品美軳免费观看| 国产亚洲成AV人片在线观黄桃| 免费人成激情视频在线观看冫 | 亚洲人成在线播放网站岛国| 99re免费视频| 激情综合亚洲色婷婷五月APP | 国产人在线成免费视频| 国产精品亚洲片夜色在线| 四虎成人免费影院网址| 18禁亚洲深夜福利人口| 亚洲最大激情中文字幕| 久久大香伊焦在人线免费| 亚洲卡一卡2卡三卡4麻豆| 精品免费久久久久久成人影院| 一级毛片a免费播放王色电影 | 精品国产成人亚洲午夜福利| 日韩免费电影在线观看| 午夜在线免费视频 | 国产免费女女脚奴视频网 | 亚洲国产精品一区| 香蕉97超级碰碰碰免费公| 亚洲AV无码AV吞精久久| 久久国产成人亚洲精品影院| 久久国产精品2020免费m3u8| 亚洲高清中文字幕免费| 亚洲 自拍 另类小说综合图区| 最近免费字幕中文大全| 亚洲国产成人精品青青草原| 国产一级大片免费看| 免费污视频在线观看| 亚洲乱码av中文一区二区| 亚洲综合亚洲综合网成人| 亚欧色视频在线观看免费| 免费的黄色的网站| 亚洲成aⅴ人片在线影院八| 亚洲&#228;v永久无码精品天堂久久 | 亚洲Av无码乱码在线观看性色 |