Spring初始化注解和xxxxEngine

本文探讨了Spring框架中@PostConstruct、InitializingBean的afterPropertiesSet和init-method注解的执行顺序及应用场景,特别是在策略模式中的使用。同时,文章讲解了ApplicationContextAware接口的作用,如何通过它创建静态公用的xxxxEngine执行引擎。最后,提出了两个问题:1.为何第三方工具包的公共方法常为静态;2.如何在静态方法中调用Spring注入的类的方法,并暗示了配置文件中的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:了解几个注解和执行顺序: 

@PostConstruct > InitializingBean(@afterPropertiesSet) > init-method

这几个注解都是spring初始化的时候生效的。谈谈使用场景:

@PostConstruct:我们在策略模式的时候可以使用,初始化把不同策略装配到不同的Type。

InitializingBean(@afterPropertiesSet):  通过类实现该接口。执行一些spring加载完就需要执行的操作 或 同上的策略模式场景。

init-method:(初始化加载一些自定义配置文件: 例如第三方接口的参数)。

 

二: 说一说:ApplicationContextAware。spring容器初始化获取类实例的方法。通常用来构造静态实例。提供静态公用方法。以xxxxxEngine命名。类似一个执行引擎。其他类直接 xxxxxEngine.run() 来执行操作。(其实这样做和@Component标志成Bean是一个意思。所以这样写的好处是啥?
思考2个问题:1:为什么第三方的工具包的公共方法都是静态的?
                        2: 如何在静态方法中调用被Spring动态注入类的方法?)

1:

public class JobLaunchEngine implements ApplicationContextAware {
    private static final Logger LOGGER = LoggerFactory.getLogger(JobLaunchEngine.class);
    private static JobLaunchEngine instance;
    @Autowired
    private JobLauncher jobLauncher;

    /**
     * 获取job执行器
     *
     * @param job        job
     * @param parameters job参数
     * @return 执行器
     */
    public static JobExecution run(Job job, JobParameters parameters) {
        LOGGER.info("开始处理报表回款解析任务");
        try {
            Assert.notNull(job, "xml target job can not be null");
            return JobLaunchEngine.instance.jobLauncher.run(job, parameters);
        } catch (Exception e) {
            LOGGER.error("处理报表回款任务异常!", e);
            throw new ApplicationException("处理报表回款任务异常!" + e);
        }
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Assert.notNull(jobLauncher, "spring batch jobLauncher can not be null");
        instance = applicationContext.getBean(JobLaunchEngine.class);
    }
}

2:spring配置文件中配置:

<bean id="jobLaunchEngine" class="com.fee.batch.JobLaunchEngine"></bean>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值