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