Spring MethodInvoker

直观的说,如果想通过字符串的配置来调用一个方法;那可以使用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>
 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这段代码是使用WinForm中的DelayLoading功能来执行一个数据绑定的方法。 先来解析一下代码的含义: 1. `new DelayLoading(this, new MethodInvoker(DataBind)).Execute();` 这是一个实例化DelayLoading类,并调用其Execute方法来执行延迟加载的操作。其中,第一个参数this是指当前窗体,第二个参数new MethodInvoker(DataBind)是指要执行的方法是DataBind。 2. `DelayLoading` 是一个WinForm中的类,用于实现延迟加载的效果。通过将方法作为参数传递给DelayLoading类的构造函数,可以在后台线程中执行这个方法。 3. `MethodInvoker` 是一个委托类型,它可以引用到要执行的方法。在这段代码中,`new MethodInvoker(DataBind)` 即是将数据绑定的方法引用传递给了MethodInvoker委托。 4. `DataBind` 是一个方法,用于执行数据绑定操作。具体方法的实现需要根据具体的需求来确定。 所以,这段代码的作用是在WinForm的窗体中执行一个数据绑定的方法,并使用延迟加载的方式来实现,以提高用户界面的响应速度。 ### 回答2: 这段代码是用于在WinForm中实现延迟加载数据绑定的功能。 首先,"new delayloading(this, new methodinvoker(databind)).execute()"是创建并执行一个名为"delayloading"的类的实例。这个类的构造函数需要两个参数,第一个参数是当前窗体对象(this),第二个参数是一个用于数据绑定的方法调用者(methodinvoker)。 在执行时,这个类会调用传入的方法调用者,也就是"databind"方法。这个方法实现了数据的绑定,将数据与相应的控件进行关联,使得用户界面能够显示数据。 使用"new methodinvoker(databind)"语法来创建方法调用者实例。这个类的构造函数需要一个参数,即要执行的方法(databind)。通过调用这个方法,实现数据绑定。 整体来看,这段代码主要是为了在WinForm中实现数据绑定的延迟加载功能。通过创建一个名为"delayloading"的类实例,并传入相关参数,执行数据绑定的方法。这样可以控制数据绑定的时机,并减少页面加载的时间和开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值