springboot使用反射后@Autowired 失效问题解决
我写在注释里面了,看看能不能看懂
//通过反射获得类对象,注意不能 new 否则为空
Class<?> aClass = Class.forName("com.seven.handlers." + s);
String simpleName = aClass.getSimpleName();
//类名前缀大写转换
String firstLowerName = simpleName.substring(0, 1).toLowerCase() + simpleName.substring(1);
/**
* 只会扫描带@Component注解的
*/
Object obj = MianMianApplication.SpringContextUtil.getBean(firstLowerName, aClass);
此时的OBj就是咱们想要的反射
配置文件如下
@Component
@Lazy(value=false)
public static class SpringContextUtil implements ApplicationContextAware {
// Spring应用上下文环境
private static ApplicationContext applicationContext;
/**
* Spring容器启动后,会把 applicationContext 给自动注入进来,然后我们把 applicationContext 赋值到静态变量中,方便后续拿到容器对象
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 获取对象
*
* @param name
* @return Object
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
public static Object getBean(String name, Class cla) throws BeansException {
return applicationContext.getBean(name, cla);
}
}
还没有评论,来说两句吧...