使用@autowired,活着构造方法注入,打断点查看注入的feigncliet为null, 搜索网上的一些博客,大致原因是因为quartz启动是通过反射将一些类注入进来,启动的时候引用这个类还没初始化好,下面是解决方案:
使用spring 提供的通过文件名获取bean的方式,注入进来
@Component
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(@NotNull ApplicationContext applicationContext) throws BeansException {
if (SpringUtil.applicationContext == null) {
SpringUtil.applicationContext = applicationContext;
}
}
// 通过name获取 Bean.
@NotNull
public static Object getBean(String name) {
return applicationContext.getBean(name);
}
// 通过class获取Bean.
@NotNull
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
// 通过name,以及Clazz返回指定的Bean
@NotNull
public static <T> T getBean(String name, Class<T> clazz) {
return applicationContext.getBean(name, clazz);
}
}
使用的时候通过类名加载类,正常使用即可
CommunicationClient communicationClient = SpringUtil.getBean(CommunicationClient.class);
// 正常调用方法
communicationClient.getFunction();