<bean id="xxx.scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
</bean>
@Component
public class QuartzScheduler {
@Qualifier("xxx.scheduler")
@Autowired
Scheduler scheduler;
@PostConstruct
public void start() {
try {
scheduler.start();
} catch (SchedulerException e) {
log.error("", e);
}
}
}
定义的时候定义了SchedulerFactoryBean的id为"xxx.scheduler",为什么注入Scheduler的时候也可以用这个ID注入???
以下仅为个人猜想:
发现你
id
类型和被注解属性类型不一致时,可能会做一些尝试:Spring 发现你
id
绑定的是个FactoryBean<T>
的实现,它会调用其getObjectType
来检查这个工厂类返回的实例类型能否与被注解属性相匹配。而
SchedulerFactoryBean
是FactoryBean<T>
的实现类,它的getObjectType
返回的就是java.lang.Class<? extends Scheduler>