目錄
一、@component
二、3個@component註解衍生註解
三、@autowired:自動根據型別注入
四、@scope("prototype") 多例、單例的配置(預設singleton單例)
首先簡單說明一下什麼是註解注入,回顧之前我們的案例,不管是裝配物件(bean),還是注入物件(bean)都需要在xml配置檔案中寫大量的這種配置,那麼如果我們使用註解注入,xml檔案中就不需要再重複配置這些bean了,直接幾行**就搞定,想想就舒服多了。註解的書寫通常是 @***x 寫在屬性、方法、類上面。
下面開始介紹常用的spring註解
泛指各種元件,就是說當我們的類不屬於各種歸類的時候(不屬於action,service,dao),我們就可以使用@component來標註這個類。下面我們來舉例具體用途。
首先建立乙個演示類 demonstration.class,裡面就只有乙個新增方法
package com.xyl.spring.test;
public class demonstration
}
如果我們之前不使用註解的時候,xml配置檔案就得寫乙個
如果我們又要獲取另乙個物件***,就得又配置乙個bean,然後各種+++下面使用註解@component現在使用@component就相當於我們在xml配置檔案中配置了
@component 相當於:
(沒有id)
@component("demonstration")
相當於:
(有id)
在demonstration類中加上註解
package com.xyl.spring.test;
@component
public class demonstration
}
然後在測試**中獲取demonstration物件,呼叫add方法
@test
public void test()
注意:現在註解還不起作用。最後我們需要修改一下beans-info.xml配置檔案
1.新增beans屬性:beans-info.xml檔案:2.修改beans屬性xmlns:context=""
3.開啟註解,設定掃瞄註解位址xsi:schemalocation="
/spring-beans.xsd
/spring-context.xsd"
<?xml version="1.0" encoding="utf-8"?>
執行結果:
配置完後,以後我們使用物件就可以直接新增註解獲取就可以了,不用再去修改xml檔案
@repository(「名稱」):dao層@service(「名稱」):service層
@controller(「名稱」):web層
功能一樣是取代,但是與component註解不同的是,這三個衍生註解是標註在特定的分層;
舉個栗子:
我們平時頁面呼叫action方法程式的流程是 (web)action——>service——>dao
如果所有層都用component註解,那麼spring容器將不知道先建立哪一層的物件。所以需要這三個衍生註解來區分
用不同註解注釋不同層;
這裡我們申明乙個物件,但是不例項化物件。然後在宣告物件上面加上@autowired註解,spring容器將自動幫我們根據型別例項化注入。舉個栗子:我們就拿action中呼叫service方法舉例
那麼,我們只要在userservice上面加上@autowired註解,spring容器就會自己去幫我們找到userservice這個物件並幫我們例項化
被@scope("prototype")註解標註的物件會被設定成多例模式,每次呼叫都將 new乙個新物件預設是@scope("singleton")單例模式,預設需要使用該註解
寫的spring系列:spring框架完全掌握spring註解注入
註解 就是乙個類,使用 註解名稱 開發中 使用註解 取代 xml配置檔案。預設情況下註解不生效,需要開啟註解功能。通過下面的配置開啟 component取代 component沒有配置id時,通過型別獲取bean,型別可以寫介面類也可以寫實現類 2 component id 取代 web開發,提供3...
Spring 註解及註解注入
compoment 標註成spring乙個普通的bean autowired 被用來實現自動 裝配,可以用來標註成員變數 方法 建構函式。當出現多個同型別當bean時 如兩個類都實現了同乙個介面 這時候spring不知道該繫結哪個實現類,就會丟擲beancreationexception異常。這時候...
Spring註解注入問題
今天做乙個ssm的登陸demo,在使用註解將乙個service注入的時候,總是報 org.springframework.beans.factory.nosuchbeandefinitionexception no matching bean of type com.st.service.iuser...