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); } } }
拓展
InitializingBean的afterPropertiesSet和init-method相同点是都是初始化方法使用的,先执行InitializingBean的afterPropertiesSet方法,而后执行init-method方法
-
Spring为bean提供了两种初始化bean的方式,实现InitializingBean接口,实现afterPropertiesSet方法,或者在配置文件中通过init-method指定,两种方式可以同时使用。
-
实现InitializingBean接口是直接调用afterPropertiesSet方法,比通过反射调用init-method指定的方法效率要高一点,但是init-method方式消除了对spring的依赖。
-
如果调用afterPropertiesSet方法时出错,则不调用init-method指定的方法。

浙公网安备 33010602011771号