@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)]