关于懒加载导致@PostConstruct失效

这是我启动类

@SpringBootApplication
@ComponentScan(basePackages = "com.bryant",lazyInit = true)
public class StartServer {
          
   
    public static void main(String[] args) {
          
   
        SpringApplication.run(StartServer.class, args);
    }
}

这是我的工具类

@Component
public class HelloUtil {
          
   

    private String helloId = "hello-world";

    @PostConstruct
    private void init(){
          
   
        initHelloId();
    }

    public String getHello(){
          
   
        return helloId;
    }

    private void initHelloId(){
          
   
        System.out.println("----------init start----------");
        this.helloId = "hello-123456";
        System.out.println("----------init finish----------");
    }

}

请求一下接口看看输出结果

输出结果是hello-123456,不是hello-world 可以看到确实是执行了@PostConstruct注解的方法,但这是在我们用到的时候才进行初始化,并不是我们想要看到的结果

我们在工具类上加上注解@Lazy(false)再看下效果

@Component
@Lazy(false)
public class HelloUtil {
          
   

    private String helloId = "hello-world";

    @PostConstruct
    private void init(){
          
   
        initHelloId();
    }

    public String getHello(){
          
   
        return helloId;
    }

    private void initHelloId(){
          
   
        System.out.println("----------init start----------");
        this.helloId = "hello-123456";
        System.out.println("----------init finish----------");
    }

}

项目启动 可以看到在项目启动前就完成了初始化

经验分享 程序员 微信小程序 职场和发展