文章目錄
- 1、@PostConstruct注解
- 1.1 介紹
- 1.2 用法
- 1.3 場景
- 2、InitializingBean接口
- 2.1 介紹
- 2.2 用法
1、@PostConstruct注解
1.1 介紹
@PostConstruct
是 Java EE/Jakarta EE 中的一個注解,用于標記一個方法在依賴注入完成后執行初始化操作。它通常與 Spring 框架一起使用,適用于需要在對象初始化時執行特定邏輯的場景。
- 初始化方法:標注的方法會在以下兩個操作完成后被調用:
- 依賴注入(DI)完成:Spring 容器完成對 Bean 的屬性注入(如 @Autowired、@Value 等)。
- Bean 實例化:Bean 對象被創建后。
- 執行時機: 是 Bean 生命周期中的一個關鍵步驟,通常在 @Autowired 或其他注入方式完成后執行,但早于 @PreDestroy 注解的銷毀方法。
1.2 用法
-
無參數且無返回值:被標注的方法必須是
void
類型且無參數。// 正確 @PostConstruct public void init() { ... }
-
不拋出受檢異常:方法不能聲明拋出受檢異常(checked exception),否則會拋出
BeanCreationException
。// 以下方法是錯誤的! @PostConstruct public void init() throws IOException { ... }
-
實例方法:只能標注在實例方法上,不能用于靜態方法或字段。
-
唯一性:一個 Bean 中只能有一個
@PostConstruct
方法,否則會引發沖突。
public class MyService {@Autowiredprivate DemoRepository demoRepository;@PostConstructpublic void init() {// 在依賴注入完成后執行的初始化邏輯System.out.println("DemoRepository is initialized: " + demoRepository);// 可在此處進行數據庫連接或其他初始化操作}
}
1.3 場景
- 資源初始化:例如建立數據庫連接、初始化緩存、加載配置等。
- 依賴驗證:檢查注入的依賴是否合法。
- 狀態初始化:設置 Bean 的初始狀態。
2、InitializingBean接口
2.1 介紹
InitializingBean 是 Spring 中的一個接口,用在 Bean 初始化后執行自定義邏輯。它只提供了一個 afterPropertiesSet()
方法。
該方法在以下時機被 Spring 容器自動調用:
- 屬性注入完成后(即所有通過
setter
方法或構造函數注入的屬性已設置完畢)。 - Bean 初始化階段的最后一步(在調用
@PostConstruct
注解的方法之后,如果同時存在的話)。
2.2 用法
@Service
@Slf4j
public class PlatformCommunicationServiceImpl implements InitializingBean {@Overridepublic void afterPropertiesSet() {syncPlatformDataInfo();log.info("執行了afterPropertiesSet方法");}
}