Spring MethodInvoker学习笔记

Spring MethodInvoker学习笔记编写业务执行代码@ComponentpublicclassAMethodClass{publicstaticStringexecute(Stringstr){returnstr.concat(“-result”);}publicStringexecute2(Stringstr){returnstr.concat(“-result2”);}}编写配置类@Configuration@Compon.

  1. 编写业务执行代码
    @Component
    public class AMethodClass { 
         
        public static String execute(String str) { 
         
            return str.concat("-result");
        }
        public String execute2(String str) { 
         
            return str.concat("-result2");
        }
    }
    
  2. 编写配置类
    @Configuration
    @ComponentScan("com.yicj.study.shiro.methodinvoke")
    public class AConfig { 
         
        @Bean
        public MethodInvoker aMethod(){ 
         
            MethodInvoker invoker = new MethodInvoker() ;
            invoker.setTargetClass(AMethodClass.class);
            invoker.setTargetMethod("execute");
            return invoker ;
        }
        @Bean
        public MethodInvoker aMethod2(AMethodClass aMethod2Class){ 
         
            MethodInvoker invoker = new MethodInvoker() ;
            invoker.setTargetObject(aMethod2Class);
            invoker.setTargetMethod("execute2");
            return invoker ;
        }
        @Bean
        public MethodInvokingFactoryBean aMethod3(){ 
         
            MethodInvokingFactoryBean factoryBean = new MethodInvokingFactoryBean() ;
            factoryBean.setTargetClass(AMethodClass.class);
            factoryBean.setTargetMethod("execute");
            factoryBean.setArguments("test3");
            return factoryBean ;
        }
    }
    
  3. 静态方法调用(单元测试)
    public class MethodInvokeTest { 
         
        /* * 注意看配置文件 * 获取配置的MethodInvoker;这个bean配置的是targetClass,要求targetMethod必须是静态方法 * */
        @Test
        public void staticMethodInvoke() throws Exception { 
         
            BeanFactory beanFactory = new AnnotationConfigApplicationContext(AConfig.class);
            MethodInvoker method = (MethodInvoker) beanFactory.getBean("aMethod");
            //下来可以自己手工设置方法参数
            Object[] arguments = new Object[1];
            arguments[0] = "test";
            method.setArguments(arguments);
            // 准备方法
            method.prepare();
            //执行方法
            Object result = method.invoke();
            System.out.println(result);
        }
        
    }
    
  4. 实例方法调用(单元测试)
    public class MethodInvokeTest { 
         
        /* * 注意看配置文件 * 获取配置的MethodInvoker;这个bean配置的是targetObject,则需要先配置一个bean,这里ref到这个bean * targetMethod可以不是静态的 * */
        @Test
        public void instanceMethodInvoke() throws Exception{ 
         
            BeanFactory beanFactory = new AnnotationConfigApplicationContext(AConfig.class);
            MethodInvoker method2 = (MethodInvoker) beanFactory.getBean("aMethod2");
            //下来可以自己手工设置方法参数
            Object[] arguments2 = new Object[1];
            arguments2[0] = "test2";
            method2.setArguments(arguments2);
            // 准备方法
            method2.prepare();
            //执行方法
            Object result = method2.invoke();
            System.out.println(result);
        }  
    }
    
  5. 但一般情况不直接使用MethodInvoker,使用MethodInvokingFactoryBean(单元测试)
    public class MethodInvokeTest { 
         
        /* * 使用MethodInvokingFactoryBean;相当于spring帮你做了上述逻辑; * 可以直接获取到方法的执行结果; * 注意这里是方法的返回值;而不是class本身;这是由于MethodInvokingFactoryBean实现了FactoryBean接口; * 由接口方法getObject()来获取最终返回的对象 */
        @Test
        public void factoryBeanInvoke(){ 
         
            BeanFactory beanFactory = new AnnotationConfigApplicationContext(AConfig.class);
            Object aMethod3 = beanFactory.getBean("aMethod3");
            System.out.println(aMethod3);
        }
    }
    
  6. 参考博客:https://blog.csdn.net/iteye_11480/article/details/82133807

今天的文章Spring MethodInvoker学习笔记分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/12450.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注