spring动态调用方法
有的时候为了程序的灵活性,需要根据参数动态的调用方法。代码框架大致spring为主,下面是具体代码:
接口:

实现类(实现类中有一个从spring容器中取的对象)

这是最初我直接用反射去调用的代码:
Object obj = Class.forName("com.rw.article.service.pay.impl.WithdrawalsServiceProxyImpl").newInstance();
log.info("obj [ {} ] " ,obj);
obj.getClass().getDeclaredMethod("test",String.class).invoke(obj,"zs1");
打印结果如下:

可以看到直接用反射需要从spring容器获取的那个对象是不能被注入的,那么只能换一种方式。
可以拿到值的方式:
Class c2 = Class.forName("com.rw.article.service.pay.IWithdrawalsProxyService");
Object obj = BeansUtils.getBean("withdrawalsServiceProxyImpl",c2 );
// Object obj = Class.forName("com.rw.article.service.pay.impl.WithdrawalsServiceProxyImpl").newInstance();
log.info("obj [ {} ] " ,obj);
obj.getClass().getDeclaredMethod("test",String.class).invoke(obj,"zs1");
再看看BeansUtils.java的代码:
@Component
public class BeansUtils implements ApplicationContextAware { private static ApplicationContext context; public static <T> T getBean(Class<T> bean) {
return context.getBean(bean);
}
public static <T> T getBean(String var1, @Nullable Class<T> var2){
return context.getBean(var1, var2);
} public static ApplicationContext getContext() {
return context;
} @Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
BeansUtils.context = context;
}
}
BeansUtils实现了ApplicationContextAware 接口,在spring容器初始化完成后,这个类就可以方便地获得 ApplicationContext 中的所有bean。换句话说,就是这个类可以直接获取Spring配置文件中,所有有引用到的bean对象。这个只要把class(Class c2 = Class.forName(“com.rw.article.service.pay.IWithdrawalsProxyService”);)传过来也可以实现动态调用某个类里面的方法
然后看这次的测试结果:
测试结果是能够使用注解从spring容器中拿到对象的,要先从spring容器中拿到的对象,spring的那套注解才生效
spring动态调用方法的更多相关文章
- Guava动态调用方法
前言 大家在Coding的时候,经常会遇到这样一个情况,根据不同的条件去执行对应的代码.我们通常的处理方式是利用if-else判断,或者直接switch-case,特别是jdk1.6之后,swith开 ...
- Struts2 动态调用方法
struts2动态调用方法有两种方式 方式一:用通配符进行调用: Action方法: package com.bjyinfu.struts.actions; public class CatchDyn ...
- struts2 type="redirectAction"重定向 与动态调用方法
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...
- Xcode中Objc动态调用方法同时避免警告的几个办法
我们在Xcode中使用objc写代码的时候往往会碰到动态调用方法的时候. 如果是静态调用这很常见,不会有任何问题: [self performSelector:@selector(method)]; ...
- C#使用表达式树动态调用方法并实现99乘法表
我们在使用C#编程的时候,经常使用反射来动态调用方法,但有时候需要动态的生成方法,下面介绍使用表达式树的方式来自动生成方法,并调用. 首先需要说明什么是表达式,熟悉Linq的程序猿都用过类似于下面的代 ...
- C# 知识点笔记:IEnumerable<>的使用,利用反射动态调用方法
IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...
- 利用java反射动态调用方法,生成grid数据
项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前 ...
- php中怎么使用call_user_func动态调用方法
php中可使用call_user_func进行方法的动态调用,可以动态调用普通函数.类方法以及带参数的类方法1.定义一个普通函数getCurrentDate,用于获取今天日期.call_user_fu ...
- Action的动态调用方法
Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法: 1. 方法一(通过methed属性指定执行方法): 可以在配置文件中配置Action的时候用method ...
随机推荐
- easyhook源码分析一
easyhook简要说明: easyhook是一个开源的hook库(http://easyhook.github.io/),其支持托管代码(.NET)和非托管代码(C/C++)hook,这里只分析了其 ...
- nginx请求转发配置
以下为无ssl证书配置的请求转发 server { listen ; server_name api.****.com; #以下为指定请求域名匹配到某一个端口 #location ~* /union ...
- Jest 里面需要注意的几个小细节
概述 最近学 jest ,有一些细节记录下来,供以后开发时参考,相信对其他人也有用. import 提升 ES6 的 import 会自动提升到文档前面,所以下面的 import 会提升到前面. le ...
- 【命令汇总】XSS payload 速查表
日期:2019-05-15 14:06:21 作者:Bay0net 介绍:收集并且可用的一些 XSS payload,网上的速查表很多,但是测试了下很多 payload 的不可用,这里都是自己能用的 ...
- JS获取URL中参数值
一.正则法: function getQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(& ...
- finereport点击图表钻取到明细表包括参数传递
1. 点击编辑图表 2. 参数传递 3. 选择分类名称 4. 钻取明细表获取 inputs 值得方法 使用公司 $inputs 获取钻取传来的值
- 20191127 Spring Boot官方文档学习(6-8)
6.部署Spring Boot应用程序 在部署应用程序时,Spring Boot的灵活打包选项提供了很多选择.您可以将Spring Boot应用程序部署到各种云平台,容器映像(例如Docker)或虚拟 ...
- Java抽象接口技巧(一)
原文链接 http://blog.csdn.net/qq_35101189/article/details/70799155 在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接 ...
- python multiprocessing模块 介绍
一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进 ...
- Java第二周总结
一.Java 基础程序设计 第一章: (1)在Java中源文件的扩展名为.java,编译Java源程序文件产生相应的字节码文件扩展名为.class (2)public class定义要求类名称保持一致 ...