spring 創(chuàng)建 bean 的 幾種方式
Spring 創(chuàng)建 bean 有 多種方式: 自動(dòng)創(chuàng)建,手動(dòng)創(chuàng)建注入;
方式1: 使用 Spring XML 配置;
<bean id=''id class=''class / >
方式2: 使用 @Component, @Service, @Controler, @Repository 注解;
這幾個(gè) 注解 都有 同樣 的 功能,被注解的 類 將會(huì) 被 Spring 容器 創(chuàng)建 單例 對(duì)象。
@Component 側(cè)重于 通用的Bean;
@Service 標(biāo)識(shí) 該類 用于 業(yè)務(wù)邏輯
@Controler 標(biāo)識(shí) 該類為 Spring MVC 控制器類。
@Repository 標(biāo)識(shí) 該類 是一個(gè) 實(shí)體誒 。只有 屬性 和 setter getter。
當(dāng)用于Spring Boot 時(shí),這些注解類 若不在根路徑下 或 子路徑下, 請(qǐng) 使用 @ComponentScan 掃描指定路徑。
方式3: 使用 @Bean 注解, 這種方式 用在 Spring Boot 應(yīng)用中。
@Cofiguration 標(biāo)識(shí) 這個(gè)類 是 一個(gè) Spring Boot 配置類, 其 將會(huì) 掃描 該類中 是否 存在 @Bean 的 注解 的方法。 有就創(chuàng)建一個(gè) bean實(shí)例 放入容器中 名字默認(rèn)就是方法名。
方法4: 使用注解@import,也會(huì)創(chuàng)建 對(duì)象并 注入容器中。
方式5: 使用 @ImportSelector 或者 ImportBeanDefinitionRegistar 接口, 配合 @Import 實(shí)現(xiàn)。
在使用 一些 Spring Boot 第三方 組件時(shí),經(jīng)常 會(huì) 看到 @Enablexxxxxxxx 來(lái)使用相關(guān)的服務(wù)。
方式6: 手動(dòng)注入 Bean 容器,有些 場(chǎng)景下 需要代碼動(dòng)態(tài)注入, 以上方式都不適用。 這時(shí)就 需要 創(chuàng)建 手動(dòng)注入。
通過(guò) DefaultListableBeanFactory 注入。
這種方式 的應(yīng)用場(chǎng)景 是 為 接口創(chuàng)建動(dòng)態(tài) 代理 對(duì)象, 并 向 Spring 容器注冊(cè)。
比如 Mybatis 中的 Mapper 接口 , Mapper 沒(méi)有實(shí)現(xiàn)類, 啟動(dòng)時(shí) 創(chuàng)建 動(dòng)態(tài) 代理對(duì)象, 將該對(duì)象 注冊(cè)到 容器中, 使用時(shí) 只要 @Autowired 注入 即可使用, 調(diào)用接口方法 會(huì)被代理 攔截, 進(jìn)而 調(diào)用 相關(guān)的 SqlSession 執(zhí)行相關(guān)的 SQL 業(yè)務(wù)邏輯。

浙公網(wǎng)安備 33010602011771號(hào)