元件註冊
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介面
publicclass
mytypefilter implements typefilter
return
false
; }
}
3.@bean
@bean可以將元件註冊到ioc容器中
publicclass
mainconf
}
person類:
publicclass
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介面
publicclass myimportbeandefinitionregistrar implements
importbeandefinitionregistrar
}}
不管用哪種方式將元件註冊到ioc容器中,元件對應的bean預設都是單例項的,可以通過@scope("prototype"),將bean調整為多例項的
@scope調整作用域
singleton 單例項的 預設值 ioc容器啟動會呼叫方法建立物件到ioc容器中,以後每次獲取就是直接從容器中拿
prototype 多例項的 ioc容器啟動並不會去呼叫方法建立物件放在容器中,每次獲取的時候才會呼叫方法建立物件
request 同一次請求建立乙個例項
session 同乙個session建立乙個例項
5.@conditional
@conditional() 按照一定的條件進行判斷,滿足條件給容器註冊bean
windowscondition類:
publicclass 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容器
@beanpublic
colo***ctorybean colo***ctorybean()
@testpublic
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...