美文网首页
关于java及Spring环境下反射的使用举例:

关于java及Spring环境下反射的使用举例:

作者: 江南Ryan | 来源:发表于2018-11-16 14:35 被阅读0次

    一:java中反射调用举例:

    1,写一个类,作为后面被反射调用的类及对方法。
    类名:TcpProcessService,方法名:execute。

    public class TcpProcessService {
    
        public String  execute(TcpSendTask task,String deviceId){
            System.out.println("the task is "+task+"  the deviceId is: "+deviceId);
            return task+deviceId;
        }
    }
    
    

    2,通过Class类得到“全包名类”的Class对象,然后反射调用其对应的方法(方法名可以是上游传来的,也可以是从数据库中查询出来的,此处为了简单直接在代码中写死)。
    注意getMethod方法及invoke方法的传参。

    String result =(String)Class.forName("testForFun.demo20181116.demo01_reflect.TcpProcessService").getMethod("execute", new Class[]{TcpSendTask.class, String.class}).invoke(Class.forName("testForFun.demo20181116.demo01_reflect.TcpProcessService").newInstance(), new Object[]{task, "PLC0001"});
    System.out.println("result::"+result);
    

    二:Spring中反射的使用举例:

    1,创建一个类继承ApplicationContextAware,继承ApplicationContextAware 来获取Bean

    public class ApplicationContextUtil implements ApplicationContextAware {
        private static ApplicationContext context;//声明一个静态变量保存
    
        public void setApplicationContext(ApplicationContext context) throws BeansException {
            ApplicationContextUtil.context = context;
        }
        public static ApplicationContext getContext() {
            return context;
        }
    }
    

    2,将ApplicationContextAware 配置进application-context.xml

       <!-- Spring 容器上下文获取 Utils -->
        <bean id="ApplicationContextUtil" class="testForFun.demo2000Utils.ApplicationContextUtil"/>
    

    3,将TcpProcessService放入Spring中

     <bean id="tcpProcessService" class="testForFun.demo20181116.demo01_reflect.TcpProcessService"/>
    

    4,在Spring中反射调用。

      String  result =(String)ApplicationContextUtil.getContext().getBean("tcpProcessService").getClass().getMethod("execute", new Class[]{TcpSendTask.class, String.class}).invoke(ApplicationContextUtil.getContext().getBean("tcpProcessService"), new Object[]{bean.getBizParam(), "PLC0001"});
       System.out.println("result::"+result);
    

    三:附录

    附录一:Api1:Class.forName(String className);
    

    image.png

    附录二:Api2:Class.getMethod(String methodName,Class<?>...parameterTypes);
    

    image.png

    附录三:Api3:Method.invoke(Object obj,Object ...args)
    
    image.png

    相关文章

      网友评论

          本文标题:关于java及Spring环境下反射的使用举例:

          本文链接:https://www.haomeiwen.com/subject/bylmfqtx.html