面試官:小伙子瀑粥,講一下spring依賴注入吧!網(wǎng)友:就這现柠,就這啊。蓖墅。寥袭。

前言

  • 依賴注入DI(Dependency Injection)的三種注入方法使用介紹
  • set方法
  • 構(gòu)造方法
  • 注解法

使用set方法注入

如下圖中UseService文件依賴Userdao對(duì)象,可以通過(guò)setUserDao11函數(shù)設(shè)置注入


配置文件使用property標(biāo)簽配置注入內(nèi)容
注意:配置文件中name參數(shù)的值取至set方法后跟的內(nèi)容同時(shí)首字母小寫
例如:set方法名是setUserDao111,那么name的值就是userDao111。


使用有參構(gòu)造函數(shù)注入

有參構(gòu)造函數(shù)注入使用constructor-arg標(biāo)簽name是要注入的構(gòu)造函數(shù)的參數(shù)名


如果注入的內(nèi)容是引用類型苦始,就使用‘ref=’給對(duì)象賦值盈简,且對(duì)象的值必須是在配置文件中注冊(cè)過(guò)的的對(duì)象id,如本文中的userServiceId和userDaoId宴霸,如果注入內(nèi)容是普通數(shù)據(jù)類型驮瞧,就使用‘value=’賦值蒜埋,賦的值可以是任意值朗鸠,無(wú)需提前注冊(cè)卸例。

使用注解

使用注解方法時(shí)不需要在配置文件中添加各個(gè)要注入的內(nèi)容筷转,而是在配置文件中配置組件掃描即可,源文件也不在需要定義set方法,構(gòu)造方法悬而。

在配置文件中添加如下語(yǔ)句呜舒,即可讓spring掃描com.syx.dao包下的所有注解,否則spring無(wú)法識(shí)別你注解的內(nèi)容

<context:component-scan base-package="com.syx.dao"></context:component-scan>

具體注解方法如下:

// 使用Component添加id為userServiceId的注解相當(dāng)于配置文件執(zhí)行了
// <bean id="userServiceId" class="com.syx.dao.service.UserService"/>
@Component("userServiceId")
public class UserService {
    // Autowired和Qualifier組合作用是按照名稱進(jìn)行注入笨奠,使用相當(dāng)于
    // <constructor-arg name="userdaoparam" ref="userDaoId"></constructor-arg>
    @Autowired
    @Qualifier("userDaoId")
    private UserDao userdaoparam;

    // Value是按照值進(jìn)行注入袭蝗,相當(dāng)于
    // <property name="test_a" value="13"></property>
    // 注解中的值可以是${...}表達(dá)式
    @Value("13")
    private int test_a;

    public void test() {
        System.out.println("注入值是" + test_a);
        userdaoparam.test();
    }
}

常用配置文件注入標(biāo)簽使用示例

  <bean id="userServiceId" class="com.syx.dao.service.UserService">
      <property name="userDao11" ref="userDaoId"></property>
      <!-- test_a 是int類型數(shù)據(jù)注入值100 -->
      <property name="test_a" value="100"></property>
      
      
      <!-- strList是List<String>集合,使用如下方法給集合添加兩個(gè)成員aaa和bbb -->
      <property name="strList">
          <list>
              <value>aaa</value>
              <value>bbb</value>
              <!-- 如果集合List存儲(chǔ)的是引用類型數(shù)據(jù) 需改用ref標(biāo)簽賦值般婆,如下
              <ref bean="userDaoId"></ref>
              -->
          </list>
      </property>


      <!-- userMap是Map<String, String>類型數(shù)據(jù) -->
      <property name="userMap">
          <map>
              <entry key="adc" value="def"></entry>
              <!-- 如果Map的鍵值對(duì)均為引用類型到腥,那么要使用如下標(biāo)簽進(jìn)行注入
              <entry key-ref="adc" value-ref="def"></entry>
              -->
          </map>
      </property>

      <!-- properties是一個(gè)Properties類型數(shù)據(jù) -->
      <property name="properties">
          <props>
              <prop key="adc">123456</prop >
              <prop key="adc">fkgj</prop >
          </props>
      </property>
  </bean>

注解詳解

  • @Component和@Controller、@Service蔚袍、@Repository三個(gè)注解功能完全一致左电,只不過(guò)后三個(gè)一般分別用于web層,service層和dao層页响,更能起到表意作用。
  • @Autowired用于字段的依賴注入段誊,當(dāng)spring容器中只有某類的一個(gè)bean時(shí)闰蚕,可以單獨(dú)使用。
    @Qualifier結(jié)合@Autowired按名稱給字段注入
    @Resource(name = “bean_id”)相當(dāng)于@Qualifier和@Autowired(“bean_id”)配合使用
  • @Value 注入普通值屬性连舍,通常Value的值會(huì)使用${…}表達(dá)式
  • @Scope 設(shè)置bean是僅創(chuàng)建單個(gè)對(duì)象還是可以創(chuàng)建多個(gè)對(duì)象没陡。
  • @PostConstruct設(shè)置bean的初始化方法,作用等同于配置文件中的init-methond="…"
  • @PreDestroy設(shè)置bean的銷毀方法,作用等同于配置文件的destory-methond="…"

總結(jié)

歡迎關(guān)注公眾號(hào):前程有光盼玄,領(lǐng)取一線大廠Java面試題總結(jié)+各知識(shí)點(diǎn)學(xué)習(xí)思維導(dǎo)+一份300頁(yè)pdf文檔的Java核心知識(shí)點(diǎn)總結(jié)贴彼! 這些資料的內(nèi)容都是面試時(shí)面試官必問(wèn)的知識(shí)點(diǎn),篇章包括了很多知識(shí)點(diǎn)埃儿,其中包括了有基礎(chǔ)知識(shí)器仗、Java集合、JVM童番、多線程并發(fā)精钮、spring原理猛铅、微服務(wù)彭则、Netty 與RPC 、Kafka仪或、日記幼东、設(shè)計(jì)模式臂容、Java算法、數(shù)據(jù)庫(kù)根蟹、Zookeeper脓杉、分布式緩存、數(shù)據(jù)結(jié)構(gòu)等等娜亿。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丽已,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子买决,更是在濱河造成了極大的恐慌沛婴,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件督赤,死亡現(xiàn)場(chǎng)離奇詭異嘁灯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)躲舌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門丑婿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人没卸,你說(shuō)我怎么就攤上這事羹奉。” “怎么了约计?”我有些...
    開(kāi)封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵诀拭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我煤蚌,道長(zhǎng)耕挨,這世上最難降的妖魔是什么细卧? 我笑而不...
    開(kāi)封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮筒占,結(jié)果婚禮上贪庙,老公的妹妹穿的比我還像新娘。我一直安慰自己翰苫,他們只是感情好止邮,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著革骨,像睡著了一般农尖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上良哲,一...
    開(kāi)封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天盛卡,我揣著相機(jī)與錄音,去河邊找鬼筑凫。 笑死滑沧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的巍实。 我是一名探鬼主播滓技,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棚潦!你這毒婦竟也來(lái)了令漂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤丸边,失蹤者是張志新(化名)和其女友劉穎叠必,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妹窖,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纬朝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骄呼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片共苛。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蜓萄,靈堂內(nèi)的尸體忽然破棺而出隅茎,到底是詐尸還是另有隱情,我是刑警寧澤嫉沽,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布患膛,位于F島的核電站,受9級(jí)特大地震影響耻蛇,放射性物質(zhì)發(fā)生泄漏踪蹬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一臣咖、第九天 我趴在偏房一處隱蔽的房頂上張望跃捣。 院中可真熱鬧,春花似錦夺蛇、人聲如沸疚漆。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)娶聘。三九已至,卻和暖如春甚脉,著一層夾襖步出監(jiān)牢的瞬間丸升,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工牺氨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狡耻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓猴凹,卻偏偏與公主長(zhǎng)得像夷狰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子郊霎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容