InitializingBean用法

InitialzingBean用法

当一个类实现这个接口之后,在spring装载完所有的bean的时候,会自动调用实现InitializingBean的afterPropertiesSet()方法,在里面去调用初始化用的服务或者逻辑。

举例

秒杀场景应用举例:

@Controller
@RequestMapping("/miaosha")
public class MiaoshaController implements InitializingBean {

    @Autowired
    RedisService redisService;

    @Autowired
    GoodsService goodsService;

    private HashMap<Long, Boolean> localOverMap =  new HashMap<Long, Boolean>();

    /**
     * 系统初始化
     * 将所有的商品库存加载到缓存中
     * */
    public void afterPropertiesSet() throws Exception {
        List<GoodsVo> goodsList = goodsService.listGoodsVo();
        if(goodsList == null) {
            return;
        }
        for(GoodsVo goods : goodsList) {
            redisService.set(GoodsKey.getMiaoshaGoodsStock, ""+goods.getId(), goods.getStockCount());
            localOverMap.put(goods.getId(), false);
        }
    }
    
}

拓展

InitializingBeanafterPropertiesSetinit-method相同点是都是初始化方法使用的,先执行InitializingBean的afterPropertiesSet方法,而后执行init-method方法

  • Spring为bean提供了两种初始化bean的方式,实现InitializingBean接口,实现afterPropertiesSet方法,或者在配置文件中通过init-method指定,两种方式可以同时使用。

  • 实现InitializingBean接口是直接调用afterPropertiesSet方法,比通过反射调用init-method指定的方法效率要高一点,但是init-method方式消除了对spring的依赖。

  • 如果调用afterPropertiesSet方法时出错,则不调用init-method指定的方法。

 

posted @ 2022-12-26 20:48  joel1889  阅读(145)  评论(0)    收藏  举报