获取CLASS实现类对象
根据class实现类的包名路径来获取实例化对象
//首先定义一个实现类路径
String a ="com.bnwisdom.demo.service.impl.ActivitiDeployServiceImpl";
//根据该路径获取class对象
Class aClass = Class.forName(confById.getImplClass());
之前是直接通过Class.forName(confById.getImplClass()).newInstance();来获取对象的,但是实际上是有问题的,因为我的项目是springBoot项目,没有放到容器去管理,所以修改成了另外的一个操作,让spring去管理它
//把这个class丢到spring去管理
activitiDeployService = (ActivitiDeployService) SpringContextUtil.getBean(aClass);
package com.bnwisdom;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
/**
* * 获取spring容器,以访问容器中定义的其他bean
*/
@Component
public class SpringContextUtil {
// spring上下文
private static ApplicationContext applicationContext;
/**
* * 实现ApplicationContextAware接口的回调方法,设置上下文环境 * @param
* applicationContext
*/
public static void setApplicationContext(
ApplicationContext applicationContext) {
if (null == SpringContextUtil.applicationContext)
SpringContextUtil.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* * 通过name获取 Bean. * * @param name * @return
*/
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
/**
* * 通过name获取 Bean. * * @param clazz * @return
*/
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
/**
* * 通过name,以及Clazz返回指定的Bean * * @param name * @param
* clazz * @return
*/
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
这样就能够获取实现类的相关方法
本文介绍了在SpringBoot项目中如何通过反射机制正确地获取并实例化对象。原本使用Class.forName().newInstance()的方式存在问题,因为对象未被Spring容器管理。通过改进,现利用Spring管理组件,确保能调用到实现类的所有方法。
9868

被折叠的 条评论
为什么被折叠?



