`
kamuikyo
  • 浏览: 28257 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Spring MethodInvoker

    博客分类:
  • Java
阅读更多

直观的说,如果想通过字符串的配置来调用一个方法;那可以使用spring提供的 MethodInvoker这个对象

示例

 

package test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.MethodInvoker;

public class AMethodClass {
	
	public static String execute(String str) {
		return str.concat("-result");
	}
	
	public String execute2(String str) {
		return str.concat("-result2");
	}
	
	public static void main(String[] args) {
		BeanFactory beanfactory = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		
		/*
		 * 注意看配置文件
		 * 获取配置的MethodInvoker;这个bean配置的是targetClass,要求targetMethod必须是静态方法
		 * */
		MethodInvoker method = (MethodInvoker) beanfactory.getBean("aMethod");
		//下来可以自己手工设置方法参数
		Object[] arguments = new Object[1];
		arguments[0] = "test";
		method.setArguments(arguments);
		try {
			// 准备方法
			method.prepare();
			//执行方法
			Object result = method.invoke();
			System.out.println(result);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		/*
		 * 注意看配置文件
		 * 获取配置的MethodInvoker;这个bean配置的是targetObject,则需要先配置一个bean,这里ref到这个bean
		 * targetMethod可以不是静态的
		 * */
		MethodInvoker method2 = (MethodInvoker) beanfactory.getBean("aMethod2");
		//下来可以自己手工设置方法参数
		Object[] arguments2 = new Object[1];
		arguments2[0] = "test2";
		method2.setArguments(arguments2);
		try {
			// 准备方法
			method2.prepare();
			//执行方法
			Object result = method2.invoke();
			System.out.println(result);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}
 

spring配置

 

<bean id="aMethod" class="org.springframework.util.MethodInvoker">
	<property name="targetClass" value="test.AMethodClass" />
	<property name="targetMethod" value="execute" />
</bean>

<bean id="aMethod2Class" class="test.AMethodClass" />
<bean id="aMethod2" class="org.springframework.util.MethodInvoker">
	<property name="targetObject" ref="aMethod2Class" />
	<property name="targetMethod" value="execute2" />
</bean>

 

 

但一般情况不直接使用MethodInvoker;而是使用MethodInvokingFactoryBean,具体可参看这2个类的javadoc

示例

 

package test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.MethodInvoker;

public class AMethodClass {
	
	public static String execute(String str) {
		return str.concat("-result");
	}
	
	public String execute2(String str) {
		return str.concat("-result2");
	}
	
	public static void main(String[] args) {
		BeanFactory beanfactory = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		
		
		/*
		 * 使用MethodInvokingFactoryBean;相当于spring帮你做了上述逻辑;
		 * 可以直接获取到方法的执行结果;
		 * 注意这里是方法的返回值;而不是class本身;这是由于MethodInvokingFactoryBean实现了FactoryBean接口;
		 * 由接口方法getObject()来获取最终返回的对象
		 */
		Object aMethod3 = beanfactory.getBean("aMethod3");
		System.out.println(aMethod3);
		
	}

}
 

 

spring配置

 

<bean id="aMethod3" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
	<property name="targetClass">
		<value>test.AMethodClass</value>
	</property>
	<property name="targetMethod">
		<value>execute</value>
	</property>
	<property name="arguments">
		<list>
			<value>test3</value>
		</list>
	</property>
</bean>
 

 

 

 

分享到:
评论
1 楼 happy.future 2014-03-11  
感谢你的分享,我参考了你的文章http://www.daniel-journey.com/archives/1156

相关推荐

    SPRING API 2.0.CHM

    MethodInvoker MethodInvokingFactoryBean MethodInvokingJobDetailFactoryBean MethodInvokingJobDetailFactoryBean.MethodInvokingJob MethodInvokingJobDetailFactoryBean.StatefulMethodInvokingJob ...

    c#多线程操作

    .net开发相关代码,c#多线程操作范例。杠杠的。

    C# winfrom 带参数与无参数的线程(可更新界面UI)

    C# winfrom 带参数与无参数的线程(可更新界面UI) 线程的开启关闭 带参与无参使用 线程更新界面信息

    在winform下使初始化速度慢的数据可以在窗体显示之后再加载,这样就能提高用户体验

    对于调用费时的步骤,可以将其延后到窗体显示之后再加载。使用方法: new DelayLoading(this, new MethodInvoker(DataBind)).Execute();

    c#写的浏览器可以看源代码

    c#写的浏览器可以看源代码 public void NewNullTabPages() //新建空白页面的方法 ... MethodInvoker mi = new MethodInvoker(this.NewNullTabPages); this.BeginInvoke(mi); Thread.Sleep(20); }

    C#线程通信

    子线程访问UI线程控件的方法 MethodInvoker Invoke

    C#-WinForm跨线程修改UI界面的实例

    多个线程竞争读写同一个资源往往会造成意想不到的意外结果,UI界面也是一种资源,所以跨线程修改UI界面往往被加以限制。这里采用Task + MethodInvoker的方式完成跨线程对UI对的修改。

    Java函数速查_类库查询手册

     MethodInvoker代理  Registry类  RegistryKey类  SendKeys类  SpecialFolder类  SystemInformation类  SystemInformation.ArrangeDirection类  SystemInformation.ArrangeStartingPosition类  ...

    c#串口测试程序

    new MethodInvoker( //表示一个委托,该委托可执行托管代码中声明为 void 且不接 //受任何参数的任何方法。在对控件的 Invoke 方法进行调用时 //或需要一个简单委托又不想自己定义时可以使用该委托。 delegate ...

    Winform跨线程操作的简单方法

    Parent.Invoke(new MethodInvoker(delegate { Parent.label1.Text = “成功” ; }));其中,“Parent”是主窗体名称。 这样,我们就是在需要窗体控件产生变化的时候,发消息通知主窗体改变控件。这就完全避免了跨...

    reflectify-protocol:从 code.google.compreflectify-protocol 自动导出

    MethodInvoker - 负责调用给定的方法。 详细信息以下面的Employee类为例 公共类员工 { 私人 int id; 私人字符串名称; 私人部门; 私人浮动工资; //构造函数... //getters and setters ... 您可以通过以下方式...

    php-ioc-contract:ioc 容器的合约

    MethodInvoker - 调用方法、函数或闭包。 例如,用于调度程序以启动子程序。 动机 假设您不想构建基于规则的服务调度程序(或类似 silex 的 http 路由器),仅在满足特定条件时才调用注册的闭包: $ ...

    vb.net2012操作跨窗体控件(单线程和多线程两种方法)实例

    Me.Invoke(New MethodInvoker(AddressOf THREAD2)) End Sub Private Sub THREAD2() Static j As Integer j = j + 1 TextBox1.Text = " 这是 [线程] 操作" & vbCrLf & _ " Button2被点了: " & j & " 次" & ...

    仿飞秋,局域网聊天工具

    MethodInvoker mi = new MethodInvoker(this.PerChat);//使用MethodInvoker委托跨线程访问 this.BeginInvoke(mi); Thread.Sleep(100); return arryFrom.Count-1; } /// /// 添加发言者的IP到用户列表有的将...

    C#在子线程中更新窗口部件的写法

    textBox1.Invoke(new MethodInvoker(delegate { textBox1.AppendText(sb.ToString()); })); } 您可能感兴趣的文章:C#在Unity游戏开发中进行多线程编程的方法C#线程处理系列之线程池中的I/O线程解析C#多线程...

    C#浏览器编程,学习使用

    4 浏览器网络编程(共两周) 4.1 浏览器工作原理(老师讲解1学时,学生理解1学时) 浏览器工作原理如图4-1所示。 图4-1 浏览器工作原理 (1) 浏览器分析超链指向页面的 URL。 ... (3) 域名系统 DNS 解析出清华大学...

    前端-后端java的Util类的工具类

    │ spring.xml │ struts.xml │ ├─28个java常用的工具类 │ │ Base64.java │ │ Base64DecodingException.java │ │ CConst.java │ │ CharTools.java │ │ ConfigHelper.java │ │ Counter.java │ │ C...

Global site tag (gtag.js) - Google Analytics