我的需求如下:
    我们知道下面2行代码中的,IUsersDAO是一个dao类的接口。
        ApplicationContext ctx=new ClassPathXmlApplicationContext("*ac.xml");
IUsersDAO iusersdao=(IUsersDAO)ctx.getBean("UsersDAO");
     但是目前我只知道这个dao类的名称,是字符串形式,通过反射的getInterface()方法可以得到该接口,但是如何应用到ctx.getBean("UsersDAO");的前边进行强转,从而调用该接口的方法。

解决方案 »

  1.   

    但是如何应用到ctx.getBean("UsersDAO");的前边进行强转,
    没看懂
      

  2.   

    也就是说前边的IUsersDAO我并没有,我并不知道是哪个接口。
    如何用反射得到它,并放到ctx.getBean("UsersDAO");前边。
      

  3.   

    tx.getBean("UsersDAO");只是spring的内部封装的方法,你可以去看spring的源代码的,肯定是用反射的啦。
      

  4.   

    既然使用了反射,那么你就用反射进行调用啊。你又要使用反射,又要强制转换成对象,当然不行。用反射就是因为只知道名称,如果要强制转换那就是说你已经知道这个类了。何必用反射。
    可以不用强制转换:
    Object iusersdao=ctx.getBean("UsersDAO"); 
    用反射调用:
    Class t=iusersdao.class;
    Method m=t.getMethod("insertUser", new Class[]{String.class}) ;
    Object returnvalue=m.invoke(iusersdao,"userA");
     
      

  5.   

    你自己都说了你只有dao类,他实现的接口你也肯定有的啦。不然能编译通过吗?除非你没实现IUsersDAO 接口,那样的话反射以后会提示类型转换错误的。
      

  6.   

    谢谢4楼的朋友,明白了。我能不能再过分的问一下,不考虑spring了。
    我就是想得到那个接口,能不能操作到呢。
      

  7.   

    一样可以啊,你通过class类的getInterfaces() 方法就可以得到接口class。不过你调用一样要使用反射进行调用。
      

  8.   

    不可能的。你仔细看看jdk的Java.lang.Class类的文档吧
      

  9.   


    如果楼主在意的是如下
    Class t=iusersdao.class; 
    Method m=t.getMethod("insertUser", new Class[]{String.class}) ; 
    Object returnvalue=m.invoke(iusersdao,"userA"); 
    那么再用Spring有点脱裤子放屁之嫌,还不如直接ClassLoader也加上,全套齐活了。