@Component
@Slf4j
public class MembershipExpirationTask implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(@NotNull ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static <T> T getBean(Class<T> clazz) {
return context != null ? context.getBean(clazz) : null;
}
//此处相当于
@Resoure
private TicketingMemberService ticketingMemberService;
TicketingMemberService ticketingMemberService =MembershipExpirationTask.getBean(TicketingMemberService.class);
}
之所以报这个错,是因为@Scheduled 注解方式级别高于资源注入(@Resource,@Autowired)级别,导致资源注入失败.
所以需要去写一个Bean去实现ApplicationContextAware接口,然后重写setApplicationContextAware方法