java中由类名和方法名字符串如何实现其调用方式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
js里通过eval()函数,在知道某个方法名是可以实现调用该方法,那么在java里边又怎么实现的呢?
<强> java里边是通过反射机制来实现,代码如下:强>
进口java.lang.reflect.Method; 公共类测试{ 公共静态void main (String [] args){抛出异常 字符串className=癱om.runqianapp.ngr.alias.example.FunClass"; 字符串methodName=皊ayHello"; 类clz=forname(名称);//对象obj=clz.newInstance ();//获取方法 m=obj.getClass()方法。getDeclaredMethod (methodName String.class);//调用方法 字符串的结果=(字符串)。调用(obj,“aaaaa"); System.out.println(结果); } } 类FunClass { 公共字符串sayHello (String s) { System.out.println(年代); 返回“你好!“ } }
<>强一个控制器调用根据不同业务分发不同服务强>
在一个项目中需要写很多的控制器去调用不同的服务,而写一个网关可以省去写控制器层的痛苦。
下面开始介绍可以分发不同服务。
1。因为服务在项目启动时就已全部注入到春容器中,所以我们需要写一个工具类,可以从弹簧上下文(applicationContext)中获取到对服务应
@ component 公共类SpringUtil实现ApplicationContextAware { @ autowired 私有静态ApplicationContext ApplicationContext; @Override 公共空间setApplicationContext (ApplicationContext ApplicationContext)抛出BeansException { 如果(SpringUtil。applicationContext==null) { SpringUtil。applicationContext=applicationContext; } System.out.println (“========ApplicationContext配置成功,在普通类可以通过调用SpringUtil.getAppContext()获取ApplicationContext对象,ApplicationContext=?+ SpringUtil。applicationContext +“========?; }//获取applicationContext 公共静态ApplicationContext getApplicationContext () { 返回applicationContext; }//通过名字获取Bean。 公共静态对象getBean(字符串名称){ 返回getApplicationContext () .getBean(名称); }//通过类获取Bean。 公共静态& lt; T>T getBean (Classclazz) { 返回getApplicationContext () .getBean (clazz); }//通过名字,以及Clazz返回指定的Bean 公共静态& lt; T>T getBean(字符串名称,Class clazz) { 返回getApplicationContext ()。getBean(名称、clazz); } }
2。上面的SpringUtil我们已经可以在上下文中直接取到对于的服务了,下面就开始编写控制器进行请求的分发(我称之为网关)。首先我们需要先写一个抽象类,来定义服务,这样接下来的服务只需要继承这个抽象类即可(我们还可以写一些时间统计,交易流水入库等,自我感觉很大的用处)。
3。一切准备就绪,我们可以开始编写contrconoller了(网关)
@ controller @RequestMapping (“/root") 公开课RootController { @ResponseBody @RequestMapping (value=https://www.yisu.com/zixun/"/h6.do”,产生={}“application/json; charset=utf - 8”,方法=RequestMethod.POST) 公共JSONObject根(@RequestBody <字符串、对象>地图,地图HttpServletRequest HttpServletRequest) { 服务=字符串(字符串)map.get(“服务”); JSONObject js=new JSONObject (); RootService RootService=(RootService) SpringUtil.getBean(服务); 返回rootService.execute(服务、地图); } }java中由类名和方法名字符串如何实现其调用方式