zoukankan      html  css  js  c++  java
  • spring初始化完成后执行初始化数据方法

    Spring提供的解决方案三种:

    1.InitializingBean

    package com.foriseland.fsoa.fabricca;

    import com.foriseland.fsoa.fabricca.service.IVerifyNumberService;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;

    /**
    * @version V1.0
    * @Description
    * @Author ZhangYue
    * @Date 2018/4/12 11:58
    */
    @Component
    public class InitData2 implements InitializingBean {
    @Autowired
    private IVerifyNumberService iVerifyNumberService;
    /**
    * Invoked by a BeanFactory after it has set all bean properties supplied
    * (and satisfied BeanFactoryAware and ApplicationContextAware).
    * <p>This method allows the bean instance to perform initialization only
    * possible when all bean properties have been set and to throw an
    * exception in the event of misconfiguration.
    *
    * @throws Exception in the event of misconfiguration (such
    * as failure to set an essential property) or if initialization fails.
    */
    @Override
    public void afterPropertiesSet() throws Exception {
    Integer number = iVerifyNumberService.findAllNumber();
    System.out.println(number);
    }
    }
    若采用XML来配置Bean的话,可以指定属性init-method。
    2.ApplicationListener
    package com.foriseland.fsoa.fabricca;

    import com.foriseland.fsoa.fabricca.service.IVerifyNumberService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.event.ContextRefreshedEvent;
    import org.springframework.stereotype.Component;

    /**
    * @version V1.0
    * @Description
    * @Author ZhangYue
    * @Date 2018/4/12 10:35
    */
    @Component
    public class InitData implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private IVerifyNumberService iVerifyNumberService;
    /**
    * Handle an application event.
    *
    * @param event the event to respond to
    */
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
    //保证在web容器中只执行一次该事件
    if (event.getApplicationContext().getParent() == null) {
    Integer number = iVerifyNumberService.findAllNumber();
    System.out.println(number);
    }
    }
    }

    注意是监听的ContextRefreshedEvent事件。

    
    

    在web 项目中(spring mvc),系统会存在两个容器,一个是root application context ,另一个就是我们自己的 projectName-servlet context(作为root application context的子容器)。这种情况下,就会造成onApplicationEvent方法被执行两次。为了避免上面提到的问题,我们可以只在root application context初始化完成后调用逻辑代码,其他的容器的初始化完成,则不做任何处理。

    
    

    event.getApplicationContext().getParent() == null


    3.@PostConstruct
    package com.foriseland.fsoa.fabricca;

    import com.foriseland.fsoa.fabricca.service.IVerifyNumberService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;

    import javax.annotation.PostConstruct;

    /**
    * @version V1.0
    * @Description
    * @Author ZhangYue
    * @Date 2018/4/12 12:01
    */
    @Component
    public class InitData3 {
    @Autowired
    private IVerifyNumberService iVerifyNumberService;

    @PostConstruct
    public void testInit(){
    System.out.println(iVerifyNumberService.findAllNumber());
    }
    }

    个人建议用第一种方法
     
  • 相关阅读:
    IDEA常用快捷键(常用)
    mysql命令
    mysql localhost能连上ip连不上
    Spring Boot2部署jar包
    host localhost is not allowed ... 1130错误
    纯真ip数据库
    微软Windows XP 正版验证通知去除的工具以及手工清除办法
    周一好困哦!!!
    SQL 连接字符串的说明(转)
    IP地址和数字之间转化的算法
  • 原文地址:https://www.cnblogs.com/alan319/p/8807464.html
Copyright © 2011-2022 走看看