Spring基於註解配置 四

2022-09-13 11:57:12 字數 3800 閱讀 7078

元件註冊

1.@configuration

通過@configuration標識,告訴spring這是乙個配置類.

@configuration    //

告訴spring這是乙個配置類

public

class

mainconf

2.@componentscan

@componentscan這個註解通過value屬性掃瞄所有被@component,@service,@controller和@repository標註過的類,將類放入ioc容器中

@componentscan可以通過includefilters屬性掃瞄的時候按照一定的規則排除元件;

@componentscan(value="

com.spring

",includefilters=),

@filter(type=filtertype.assignable_type,classes= ),

@filter(type=filtertype.custom,classes= )

},usedefaultfilters=false)

其中:1.annotation:按照註解進行排除

2.assignable_type:按照給定的型別進行排除

3.aspectj:使用aspectj表示式進行排除

4.regex:使用正規表示式進行排除

5.custom:自定義規則

自定義規則需要實現typefilter介面

public

class

mytypefilter implements typefilter

return

false

; }

}

3.@bean

@bean可以將元件註冊到ioc容器中

public

class

mainconf

}

person類:

public

class

person

public

void

setname(string name)

public

integer getage()

public

void

setage(integer age)

@override

public

string tostring()

public

person(string name, integer age)

public

person()

}

4.@import,importselector和importbeandefinitionregistrar

@import匯入元件,id預設是元件的全類名

@import()

importselector:返回需要匯入的元件的全類名陣列,需要實現importselector介面

//

自定義邏輯返回需要匯入的元件

public

class myimportselector implements

importselector ;

}}

importbeandefinitionregistrar:手動註冊到bean容器中,需要實現importbeandefinitionregistrar介面

public

class myimportbeandefinitionregistrar implements

importbeandefinitionregistrar

}}

不管用哪種方式將元件註冊到ioc容器中,元件對應的bean預設都是單例項的,可以通過@scope("prototype"),將bean調整為多例項的

@scope調整作用域

singleton 單例項的 預設值    ioc容器啟動會呼叫方法建立物件到ioc容器中,以後每次獲取就是直接從容器中拿

prototype 多例項的 ioc容器啟動並不會去呼叫方法建立物件放在容器中,每次獲取的時候才會呼叫方法建立物件

request 同一次請求建立乙個例項

session 同乙個session建立乙個例項

5.@conditional

@conditional()  按照一定的條件進行判斷,滿足條件給容器註冊bean

windowscondition類:

public

class windowscondition implements

condition

return

false

; }

}

linuxcondition類:

//

判斷是否是linux系統

public

class linuxcondition implements

condition

return

false

; }

}

將linuxcondition和windowscondition註冊進ioc容器中,並新增@conditional標識

@bean("bill")

@conditional()

public

person person01()

@bean("linus")

@conditional()

public

person person02()

//動態獲取環境變數的值:windows 10

string property = environment.getproperty("os.name");

system.out.println(property);

因為我用的是windows 10系統,所有,會將person01註冊進ioc容器

6.使用spring提供的factorybean(工廠bean),將元件註冊進ioc容器

//

建立乙個spring定義的factorybean

public

class colo***ctorybean implements factorybean

@override

public class<?>getobjecttype()

//是否是單例

//true,這個bean是單例,在容器中儲存乙份

//false,多例項,每次獲取都會建立乙個新的bean

@override

public

boolean

issingleton()

}

將工廠通過@bean註冊進ioc容器

@bean

public

colo***ctorybean colo***ctorybean()

@test

public

void

testimport()

private

void

for(string string : strings)

//工廠bean獲取的是呼叫getobject建立的物件

system.out.println(bean.getclass());

system.out.println(bean.getclass());

}

基於註解配置spring

1 對 bean 的標註基於註解方式有3個註解 2 想要 spring 獲得基於註解的bean 需要配置 進行掃瞄,並從註解中獲得配置資訊。3 自動裝配 bean 使用 autowired 註解實現 bean 的依賴注入。autowired 預設按照型別匹配 bytype 的方式在容器中查詢匹配的b...

spring 基於註解的spring配置

spring是乙個基於ioc和aop的結構j2ee系統的框架 ioc 反轉控制 是spring的基礎,inversion of control 簡單說就是建立物件由以前的程式設計師自己new 構造方法來呼叫,變成了交由spring建立物件 di 依賴注入 dependency inject.簡單地說...

Spring 基於註解的配置

從 spring 2.5 開始就可以使用註解來配置依賴注入。而不是採用 xml 來描述乙個 bean 連線,你可以使用相關類,方法或字段宣告的註解,將 bean 配置移動到元件類本身。在 xml 注入之前進行註解注入,因此後者的配置將通過兩種方式的屬性連線被前者重寫。註解連線在預設情況下在 spri...