通过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> T getBean(String beanId, Class<T> 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对象