資源不由使用的的雙方進行管理,而是不適用資源的第三方。
這樣做的的好處有:
該註解一般是在config類上面進行配置,如果不加路徑就是掃瞄所在類對應的包下的所有類,這個是用來掃瞄出配置了@config、@service等註解資訊的類。
高階用法:排除指定的註解。filtertype.annotation 是通過指定需要過濾的注釋;filtertype.custom是指定需要過濾的類。
該註解用來指定bean的作用域物件。@componentscan
(basepackages =
,includefilters =),
@componentscan
.filter
(type = filtertype.custom,value = test.
class)}
,usedefaultfilters =
false
)public
class
selfconfig
用於判斷加上這個註解的bean是否被注入。@configuration
public
class
selfconfig
}
下面**的意思就是說通過selfconditional 判斷容器中有沒有test這個bean,有就將user這個bean注入到容器中,沒有就不注入。
將car這個物件注入ioc@configuration
public
class
selfconfig
@bean
@conditional
(value =
)public user user()
}public
class
selfconditional
implements
condition
return
false;}
}
方式一:public
class
selffactorybean
implements
factorybean
@override
public class<
?>
getobjecttype()
@override
public
boolean
issingleton()
}
預設情況下bean是單例項建立的,在這個情況下容器啟動的時候,bean的物件就建立了,而且容器銷毀的時候,也會呼叫bean的銷毀方法
當指定為多例項時,容器啟動的時候,bean是不會被建立的而是在獲取bean的時候被建立,而且bean的銷毀不受ioc容器的管理.
方式二:public
class
myconfig
}public
class
mymain
}最終輸出
car初始化
com.example.spring_test.entity.car@15b204a1
car初始化**
*com.example.spring_test.entity.car@2ddc8ecb
通過實現initializingbean介面來進行初始化;通過實現disposablebean介面來進行銷毀
方式三:@component
public
class
user
implements
initializingbean
, disposablebean
/** * disposablebean 的銷毀方法
* @throws exception
*/@override
public
void
afterpropertiesset()
throws exception
}@configuration
@componentscan
(basepackages =
)public
class
myconfig
public
class
mymain
} 輸出:
user初始化方法
com.example.spring_test.entity.user@44040454
user銷毀方法
通過實現beanpostprocessor介面,該介面會在每個bean被初始化之前和之後執行,而不是單單指某乙個bean
自動裝配首先時按照型別進行裝配,若在ioc容器中發現了多個相同型別的元件,那麼就按照屬性名稱來進行裝配@component
public
class
user
implements
beanpostprocessor
@override
public object postprocessafterinitialization
(object bean, string beanname)
throws bean***ception
}
@primary:在眾多相同的bean中,優先使用@primary註解的beanpublic
class
myconfig
@bean
public userservice userservice2()
@bean
public userservice userservice()
@autowired
public userservice userservice;
@autowired
public userservice userservice2;
}
spring 原始碼學習 1
1.spring 是乙個非侵入性 non invasive 框架,其目標是使應用程式 對框架的依賴最小化,應用 可以在沒有spring或者其它的容器下執行。2.spring提供了乙個一致的程式設計模型,使用應用直接使用pojo開發,從需可以與應用環境 如web伺服器 隔離開來。3.spring推動應...
Spring原始碼學習(1)
一 前言 該系列部落格用於記錄本人學習spring原始碼的過程,以spring5.1為例。第一篇筆記不會記錄太多 相關的內容,更多的是梳理一下spring整體的結構,本人學識有限,如果書寫過程中有什麼紕漏希望及時指出。二 spring簡介 spring是乙個開源框架,它由rod johnson建立。...
Spring 原始碼學習 day1
前言 最近也不知道該忙些什麼樣的事情。便隨便看看原始碼算了。正文 1 或git clone https 2 spring 原始碼是採用 gradle 來編譯的。至於 gradle 怎麼安裝,請參考 gradle 的安裝 開啟命令視窗,將當前目錄切換到原始碼所在目錄 像看那部分就到哪部分的目錄下 執行...