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 {@Beanpublic MethodInvoker aMethod(){MethodInvoker invoker = new MethodInvoker() ;invoker.setTargetClass(AMethodClass.class);invoker.setTargetMethod("execute");return invoker ;}@Beanpublic MethodInvoker aMethod2(AMethodClass aMethod2Class){MethodInvoker invoker = new MethodInvoker() ;invoker.setTargetObject(aMethod2Class);invoker.setTargetMethod("execute2");return invoker ;}@Beanpublic 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必须是静态方法* */@Testpublic 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可以不是静态的* */@Testpublic 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()来获取最终返回的对象*/@Testpublic 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学习笔记相关推荐

  1. Spring MVC 学习笔记 对locale和theme的支持

    Spring MVC 学习笔记 对locale和theme的支持 Locale Spring MVC缺省使用AcceptHeaderLocaleResolver来根据request header中的 ...

  2. Spring Cloud 学习笔记(四)-Spring Cloud Hystrix

    Spring Cloud 学习笔记(四)-Spring Cloud Hystrix 由于前一阵子项目的原因,今天才继续弄上,今天想学习一下Hystrix组件 这个组件还挺抽象的,最开始我一直没太明白, ...

  3. Spring Boot学习笔记-实践建言

    2019独角兽企业重金招聘Python工程师标准>>> 本文延续<Spring Boot学习笔记-快速示例>,从开发指南中摘出一些实践经验可供参考.这也是笔者看到的眼前一 ...

  4. Spring.NET学习笔记10——方法的注入(基础篇) Level 200

    多数用户都会将容器中的大部分对象布署为singleton模式.当一个singleton对象需要和另一个singleton对象协作,或者一个非singleton对象需要和另一个非singleson对象协 ...

  5. Spring.NET学习笔记——前言

    Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入.面向方面编程(AOP).数据访问抽象及ASP.NET扩展等等.Sprin ...

  6. Spring Boot学习笔记-进阶(3)

    文章目录 Spring Boot学习笔记-进阶(3) 一.Spring Boot与缓存 二.Spring Boot与消息 三.Spring Boot与检索 四.Spring Boot与任务 异步任务 ...

  7. Spring Boot学习笔记-基础(2)

    Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...

  8. Spring Boot学习笔记(1)

    文章目录 Spring Boot学习笔记(1) Spring Boot 整合 JSP Spring Boot HTML Thymeleaf 常用语法 Spring Boot 数据校验 Spring B ...

  9. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

最新文章

  1. 在GridView里使用上下箭头(小键盘旁边)来选择记录
  2. QQ目录里哪个文件是记录系统消息的?
  3. pythonhtml内容比较_Python使用difflib模块比较两个文件内容异同,同时输出html易浏览...
  4. 代码优化Android ListView适配器三级优化详解
  5. raft算法学习(一):角色概念以及选举过程
  6. 【Python】 配置解析ConfigParser 命令行参数解析optparser
  7. python2.7安装教程选哪个版本运行ride_RobotFramework-RIDE环境搭建二:Robot Framework-RIDE安装过程以及踩雷点...
  8. 离不开的微服务架构,脱不开的RPC细节(值得收藏)!!!
  9. C#的发展历程第五 - C# 7开始进入快速迭代道路
  10. 韩国女主播被中国土豪打赏13万 差点吓晕!网友:真是没见过世面
  11. 微软未来将在其开发语言整合F#语言(2007-10)
  12. 《AutoCAD 2014中文版实用教程》一一2.2 圆类命令
  13. LeetCode:Path Sum
  14. 深度学习2.08.tensorflow的高阶操作之张量排序
  15. 如何换ip ,最简单有效的换ip方法在这里
  16. 图解数据结构与算法【Java】0概述
  17. 为什么高质量计算机书籍几乎都是外国人写的?
  18. antd-mobile下拉加载
  19. 软件测试中 Bug 书写规范
  20. 程序人生(一)从“道·法·术·器“”的角度来谈谈程序的境界

热门文章

  1. 背包问题 贪心算法 java_JS基于贪心算法解决背包问题示例
  2. vue echarts 镂空饼图配置
  3. Head插件——学习Elasticsearch的锋刃利器!
  4. 书论37 李嗣真《书后品》
  5. ThinkPad X1Carbon 使用VMware打开虚拟机报错Intel VT-x
  6. 如何给PDF添加书签?手机也能轻松实现
  7. RHEL8安装epel源
  8. 苹果6plus网络显示无服务器,苹果iPhone6s/6s Plus现身网络,iPhone6c去向存疑
  9. HLSL编程实现PhotoShop滤镜效果
  10. 你被「七月再见,八月你好」刷屏了吗?