开发-记录-收藏

@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
上一篇 下一篇

猜你喜欢

热点阅读