@compent 結合 @PostConstruct 加載數據字典

@Compent spring組件 // org.springframework.stereotype.Component
@PostConstruct java註解 //javax.annotation.PostConstruct

@PostConstruct在項目中的用處
1.spring項目加載數據字典
@PostConstruct註解的方法在項目啓動的時候執行這個方法,也可以理解爲在spring容器啓動的時候執行,可作爲一些數據的常規化加載,比如數據字典之類的。

以例子說明

  • 實際項目中可以在PostConstruct執行時候將數據字典保存到redis或其他緩存中,設置過期時間,項目啓動全部獲取;其他地方調用的時候直接可以從緩存中獲取

/**
 * @description 構造數據字典
 */
@Component
public class DataDict {
	
	private Logger logger = LoggerFactory.getLogger(this.getClass());
	
	public DataDict() {
		logger.info("--------數據字典構造方法---");
	}
	
	// 這個就不列出來了,就是一個訂單的service
	@Autowired
	private SdOrderService sdOrderService;
	
	private SdOrder orderTest;
	
	public SdOrder test() {
		return orderTest;
	}
	
	@PostConstruct
	public void init() {
		logger.info("--------@PostConstruct的方法---");
		String orderNo = "SD201909111129308026";
		// 根據訂單號查詢數據看數據
		orderTest = sdOrderService.selectByOrderNo(orderNo);
	}
}


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring.xml","classpath:spring-mybatis.xml","classpath:spring-rabbitmq.xml"})
@WebAppConfiguration
public class EverythingTest {
	private Logger logger = LoggerFactory.getLogger(this.getClass());
    @Autowired
	private DataDict dataDict;
	
	@Test           
	public void testPostConstruct() {
		SdOrder order = dataDict.test();
		logger.info("----訂單>:{}",order);
	}
}

// 打印結果
// [INFO][][main][2019-09-20 16:22:05] andy.bean.po.DataDict.<init>(DataDict.java:24) [--------數據字典構造方法---]

// [INFO][][main][2019-09-20 16:22:22] andy.bean.po.DataDict.init(DataDict.java:38) [--------@PostConstruct的方法---]

// [INFO][][main][2019-09-20 16:23:23] com.launch.sharedevice.EverythingTest.testPostConstruct(EverythingTest.java:63) [----訂單>:SdOrder(userId=202, orderNo=SD201909111129308026, costRuleId=123, deviceNo=989820000212, price=0.01, currencyType=0, payFrom=1, payItem=3, payStatus=0, payTime=null, thirdTradeNo=null, number=1)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章