java加载顺序

java加载顺序

作用场景:在项目启动时提前将部分数据加载到spring容器中。

解决方案:

1. 定义静态方法;在类加载时执行。

2. 实现CommandLineRunner接口;容器启动后加载。

@Component
@Order(1)
public class RunnerLoadOne implements CommandLineRunner {

  @Override
  public void run(String... args) throws Exception {
      ClassDo classDo = SpringContextUtil.getBean(ClassDo.class);
      classDo.setClassName("Java");
      System.out.println("------------容器初始化bean之后,加载资源结束-----------");
  }
}

@Component
@Order(2)
public class RunnerLoadTwo implements CommandLineRunner {
  @Override
  public void run(String... args) throws Exception {
      ClassDo bean = SpringContextUtil.getBean(ClassDo.class);
      System.out.println("依赖预先加载的资源数据:" + bean.getClassName());
  }
}

结果:
------------容器初始化bean之后,加载资源结束-----------
依赖预先加载的资源数据:Java

3. @PostConstruct ;在具体bean的实例化时执行。

加载顺序: Constructor(构造器) > @Autowired > @PostConstruct > 静态方法

4. 实现 InitializingBean接口;重写 afterPropertiesSet()方法

附录一:@Order(n)

bean实例加载顺序,n的值越小,越先加载。

posted @ 2022-07-28 17:20  liwinallucky  阅读(187)  评论(0)    收藏  举报