spring 中使用反射

通过BeanId 获取Bean 

package cn.com.kgo.eventhand.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@SuppressWarnings("static-access")
@Component
public class ContextUtil implements ApplicationContextAware {
	private static ApplicationContext commonApplicationContext;

	public void setApplicationContext(ApplicationContext context) throws BeansException {
		this.commonApplicationContext = context;
	}

	/**
	 * 根据提供的bean名称得到相应的服务类
	 * 
	 * @param beanId
	 *            bean的id
	 * @return 返回bean的实例对象
	 */
	public static Object getBean(String beanId) {
		return commonApplicationContext.getBean(beanId);
	}

	/**
	 * 根据提供的bean名称得到对应于指定类型的服务类
	 * 
	 * @param beanId
	 *            bean的id
	 * @param clazz
	 *            bean的类类型
	 * @return 返回的bean类型,若类型不匹配,将抛出异常
	 */
	public static  T getBean(String beanId, Class clazz) {

		return commonApplicationContext.getBean(beanId, clazz);
	}

}

通过反射执行Bean的方法

很多时候使用bean的时候并不能获取到实体对象和接口对象,无法对对象进行转型,这时候只能采用反射的方式执行,Bean的方法。

获取方法

Method method = ReflectUtil.getMethod(obj.getClass(), methodName);

ReflectUtil 是spring 的反射工具类 ,obj 可以是通过上面的方法获取的bean对象,getMethod方法有多个重载,可以声明参数

执行方法

第一种方式

使用java原始的方式

method.invoke(obj, args);

method 是反射获取的方法实体,obj为bean 对象,args 是参数。

第二种方式,也是推荐使用方式

使用ReflectUtil对象

ReflectionUtils.invokeMethod(method, obj, args);

method 方法实体,obj bean实体,args参数

执行成功返回object对象

 

 

 

 

你可能感兴趣的:(java,spring)