日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring学习(七)bean装配详解之 【通过注解装配 Bean】【自动装配的歧义解决】...

發(fā)布時(shí)間:2024/4/17 javascript 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring学习(七)bean装配详解之 【通过注解装配 Bean】【自动装配的歧义解决】... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文借鑒:Spring學(xué)習(xí),@Bean 的用法(特此感謝!)

自動(dòng)裝配

1、歧義性

我們知道用@Autowired可以對(duì)bean進(jìn)行注入(按照type注入),但如果有兩個(gè)相同類(lèi)型的bean在IOC容器中注冊(cè)了,要怎么去區(qū)分對(duì)哪一個(gè)Bean進(jìn)行注入呢?

如下情況,若用@Autowired的方式按類(lèi)型注入,IOC容器就不知道應(yīng)該注入哪個(gè)了:

<bean name="source1" class="pojo.Source"><property name="fruit" value="橙子"/><property name="sugar" value="多糖"/><property name="size" value="超大杯"/> </bean> <bean name="source2" class="pojo.Source"><property name="fruit" value="橙子"/><property name="sugar" value="少糖"/><property name="size" value="小杯"/> </bean>

Spring對(duì)這種情況提供了2個(gè)注解進(jìn)行解決:

@Primary 注解

定義:代表首要的,當(dāng) Spring IoC 檢測(cè)到有多個(gè)相同類(lèi)型的 Bean 資源的時(shí)候,會(huì)優(yōu)先注入使用該注解的類(lèi)。

問(wèn)題:該注解只是解決了首要的問(wèn)題,但是并沒(méi)有選擇性的問(wèn)題。

@Qualifier 注解

定義:此注解可以讓Spring使用name的方式進(jìn)行Bean的裝配以及注入

/* 包名和import */ public class JuiceMaker {......@Autowired@Qualifier("source1")//指定注入名稱(chēng)為 "source1" 的 Bean 資源public void setSource(Source source) {this.source = source;} }

2、使用@Bean 裝配 Bean

基礎(chǔ)用法

定義:@Bean是一個(gè)方法級(jí)別上的注解,主要用在@Configuration注解的類(lèi)里,也可以用在@Component注解的類(lèi)里。

用法:標(biāo)識(shí)這個(gè)方法可以產(chǎn)生一個(gè)Bean并且交給Spring容器管理,告訴Spring可以在這個(gè)方法中拿到一個(gè)Bean。

PS:添加的bean的id為方法名

@Configuration public class AppConfig {@Bean//用@Bean注解配置Bean時(shí),bean的ID默認(rèn)為方法的名稱(chēng)public TransferService transferService() {return new TransferServiceImpl();}}

上面的代碼等同于

<beans><bean id="transferService" class="com.acme.TransferServiceImpl"/> </beans>

bean的依賴(lài)

@bean 也可以依賴(lài)其他任意數(shù)量的bean,如果TransferService 依賴(lài) AccountRepository,我們可以通過(guò)方法參數(shù)實(shí)現(xiàn)這個(gè)依賴(lài)。

@Configuration public class AppConfig {@Beanpublic TransferService transferService(AccountRepository accountRepository) {//PS:此方法的入?yún)⒕褪欠祷刂邓蕾?lài)的對(duì)象return new TransferServiceImpl(accountRepository);}}

3、Bean的作用域

可以通過(guò) @Scope 注解或者 <bean> 元素中的 scope 屬性來(lái)設(shè)置Bean的作用域

4、Spring 表達(dá)式

一個(gè)例子簡(jiǎn)單了解下:?

package pojo;import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;@Component("elBean") public class ElBean {// 通過(guò) beanName 獲取 bean,然后注入role這個(gè)對(duì)象@Value("#{role}")private Role role;// 獲取 bean 的屬性 id,并注入給id這個(gè)變量@Value("#{role.id}")private Long id;// 調(diào)用 bean 的 getNote 方法,并注入給note這個(gè)變量@Value("#{role.getNote().toString()}")private String note;/* getter and setter */ }

小結(jié):?

@Value("#{}") 表示SpEl表達(dá)式,通常用來(lái)獲取bean的屬性,或者調(diào)用bean的某個(gè)方法,或者常量注入

PS:簡(jiǎn)要的說(shuō),就是通過(guò)@Value這個(gè)注解注入對(duì)象或者屬性給相應(yīng)的變量(簡(jiǎn)單的理解為賦值操作)。

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/riches/p/11526413.html

總結(jié)

以上是生活随笔為你收集整理的Spring学习(七)bean装配详解之 【通过注解装配 Bean】【自动装配的歧义解决】...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。