美文网首页spring
SpringBoot2.x基础篇—初始化方法

SpringBoot2.x基础篇—初始化方法

作者: 小胖学编程 | 来源:发表于2019-07-09 19:04 被阅读0次

    JAVA && Spring && SpringBoot2.x — 学习目录

    结论:构造器-->自动注入-->PostConstrut-->InitializingBean-->init方法
    -->CommandLineRunner接口方法

    1. CommandLineRunner、ApplicationRunner接口

    CommandLineRunner、ApplicationRunner接口是在容器成功启动后的最后一步回调。

    在官方doc中:

    在一个spring上下文中,多个CommandLineRunner可以被同时执行,并且执行顺序按照@Order注解的参数保持一致。

    若是需要访问ApplicationArguments去代替掉字符串数组,可以考虑使用ApplicationRunner类。

    //@Order(2)
    @Component
    public class ServerStartedReport implements CommandLineRunner{
        @Override
        public void run(String... args) throws Exception {
            System.out.println("===========ServerStartedReport启动====="+ LocalDateTime.now());
        }
    }
    

    2. InitializingBean接口

    可以使用spring的InitializingBean接口的afterPropertiesSet来完成初始化。这个方法将在所有的属性被初始化后被调用。但是会在init方法前调用。

    但如果是延迟加载的话,即使用@Lazy注解,可以让用户在首次使用的时候进行初始化。afterPropertiesSet也会在首次使用的时候进行初始化。

    @Component
    @Lazy
    public class EventImpl implements InitializingBean {
    
    
        private String id;
        private  String name;
    
    
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("来了!!!=========================================================");
        }
    
    }
    

    3. @PostConstruct接口

    如果想在生成对象之后完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么无法在构造函数中实现,为此,可以使用@PostConstruct注解一个方法来完成初始化操作。

    被@PostConstruct修饰的方法会在服务器加载Servlet(bean)的时候运行,并且只会被服务器调用一次,但是注意的是,该方法会在构造方法、属性依赖注入之后,init()方法之前运行

    4. init方法

    在Spring中,我们将对象放入容器的方法一般有两种。

    1. 注解法,使用@Component注解等;
    2. 配置法,将bean注册到spring.xml中;

    在SpringBoot中,我们可以使用@Configuration@Bean注解,将Bean放入到容器中。我们也可以指定init方法。初始化对象的时候,便可自动调用init方法执行。

    @Configuration
    public class DemoBeanConfiguration {
    
        @Bean(initMethod = "init",destroyMethod = "destroy")
        public DemoBean getBean(){
            DemoBean demoBean = new DemoBean();
            demoBean.setId("001");
            demoBean.setName("002");
            return demoBean;
        }
    }
    
    public class DemoBean implements InitializingBean {
    
        private String id;
        private  String name;
    
        public DemoBean() {
            System.out.println("初始化——构造方法!");
        }
    
        private void init(){
            System.out.println("初始化——init方法!");
        }
        private void destroy() {
            System.out.println("初始化——destroy方法!");
        }
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("初始化——InitializingBean接口");
        }
        @PostConstruct
        private void postConstruct(){
            System.out.println("初始化——@PostConstruct方法");
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    在容器初始化过程中便会按照如下的顺序执行初始化对象的操作。

    初始化——构造方法!
    初始化——@PostConstruct方法
    初始化——InitializingBean接口
    初始化——init方法!
    ---容器启动完毕后...
    容器启动—CommandLineRunner接口方法!
    

    文章参考:

    CommandLineRunner或者ApplicationRunner接口

    相关文章

      网友评论

        本文标题:SpringBoot2.x基础篇—初始化方法

        本文链接:https://www.haomeiwen.com/subject/wiefkctx.html