@PostConstruct 注解说明
2019-07-30 本文已影响0人
依然慢节奏
一、Spring中Bean生命周期
SpringBean生命周期二、PostConstruct 注解说明
Spring中Constructor、@Autowired、@PostConstruct三者的顺序,A类中引用B类对象,生成A类对象进行依赖注入时,引用的B类对象必须存在才能注入A类中;例如A类中有B类对象,生成A类实例前必须先注入B类实例;
@Component
public class A{
@Autowired
private B b;
}
现在A类中成员变量b被@Autowried注解,实例b注入是发生在A的构造方法执行完之后的。如果在A的构造方法中需要用到实例b,那么就无法在构造函数中进行;此时可以采用@PostConstruct注解,@PostConstruct注解的作用是在依赖注入完成后调用被注解的方法;
/**
* Email: love1208tt@foxmail.com
* Copyright (c) 2019. missbe
* @author lyg 19-7-11 下午10:31
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class QuartzTaskServiceImpl extends ServiceImpl<QuartzTaskDao, QuartzTask> implements QuartzTaskService {
private static final Logger LOGGER = LoggerFactory.getLogger(QuartzTaskService.class);
@Resource
private Scheduler scheduler;
public QuartzTaskServiceImpl() {
LOGGER.info("current constructor scheduler object:" + scheduler);
}
/**
* 项目启动时,初始化定时器
*/
@PostConstruct
public void init() {
LOGGER.info("current init method scheduler object:" + scheduler);
EntityWrapper<QuartzTask> wrapper = new EntityWrapper<>();
wrapper.eq("del_flag", false);
wrapper.eq("quartz_type", Constants.QUARTZ_API_GROUPS);
List<QuartzTask> scheduleJobList = selectList(wrapper);
for (QuartzTask scheduleJob : scheduleJobList) {
CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, scheduleJob.getId());
//如果不存在,则创建
if (cronTrigger == null) {
LOGGER.info("Quartz创建定时任务成功,任务:" + scheduleJob);
ScheduleUtils.createScheduleJob(scheduler, scheduleJob);
} else {
LOGGER.info("Quartz更新定时任务成功,任务:" + scheduleJob);
ScheduleUtils.updateScheduleJob(scheduler, scheduleJob);
}
}
}
}
2019-07-30 22:37:04.503 INFO 5472 --- [main] com.unnet.yjs.service.QuartzTaskService : current constructor scheduler object:null
2019-07-30 22:37:04.749 INFO 5472 --- [main] com.unnet.yjs.service.QuartzTaskService : current init method scheduler object:org.quartz.impl.StdScheduler@33430fc