首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java利用反照得到实例

2013-04-20 
java利用反射得到实例对于面向接口编程的项目免不了要一反射相接触,动态得到实例:public interface a { pu

java利用反射得到实例

对于面向接口编程的项目免不了要一反射相接触,动态得到实例: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();具体代码: package com.onoff.chijiunan;public interface Adonoffshowbanner {public void on(boolean blon);public void off(boolean bloff);}                   try {                          Class<?> c = Class.forName(Adonoff.classname);//Adonoff.classname  包名+类名                           Adonoffshowbanner ads = (Adonoffshowbanner)c.newInstance();                          ads.off(false);                      } catch (ClassNotFoundException e) {                          e.printStackTrace();                      } catch (IllegalAccessException e) {                          e.printStackTrace();                      } catch (InstantiationException e) {                          e.printStackTrace();                      }  

热点排行