Spring MethodInvoker

Spring MethodInvoker直观的说,如果想通过字符串的配置来调用一个方法;那可以使用spring提供的 MethodInvoker这个对象示例 packagetest;importorg.springframework.beans.factory.BeanFactory;importorg.springframework.context.support.ClassPathXmlApplicat…

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

 

 

 

 

今天的文章Spring MethodInvoker分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/12073.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注