下面的這段代碼是SpringGuide中的一個例子
public class MyServlet extends HttpServlet {
?
? public void doGet(
HttpServletRequest request,?
HttpServletResponse response)
???? throws ServletException, IOException {
?? ……
? }
}
作者把這個Servlet的應(yīng)用歸為type1型的依賴注入。以前我曾經(jīng)看過這個例子,不過當(dāng)時沒有怎么理解。
今天,開始仔細(xì)的學(xué)習(xí)的時候,好好的想了一下,覺得稍有理解。
對于一個Servlet來說,可能覺得,在用戶請求到達(dá)的時候,其響應(yīng)就完了,如果簡單的看這個問題,那么就太簡單了。作為我們來說需要知道所以然。
如果單純的是一個類,調(diào)用一個方法do(String a,String b),提供兩個參數(shù),那也就正常了。因?yàn)槟阏{(diào)用這個方法的時候,已經(jīng)實(shí)例化了,有可能是你自己實(shí)例化的 new Object ().do("a,","b")。
但是你在請求到一個servlet的時候,卻不需要去顯式創(chuàng)建一個servlet的實(shí)例,然后再調(diào)用其doGet(request,response)方法,因?yàn)?,你在請求到達(dá)之前,先到達(dá)容器,讓后再到servlet,在到達(dá)servlet之前,并沒有生成對應(yīng)的request對象和response對象。所以此時,servlet并不知道要做什么。
問題來了,
request從哪來?
response從哪來?
是你封裝的嗎?
其實(shí),此時的請求由容器接收,并封裝和創(chuàng)建對應(yīng)的request和response對象,然后把傳入到servlet對象里面。
也就是說,在你動態(tài)的請求之前,這個依賴并不存在。
請求之后,容器封裝之后的對象才有了依賴,這是個動態(tài)的依賴。然后才會注入到servlet里面。
這就是為什么是動態(tài)依賴,是依賴注入。
我對依賴的一點(diǎn)粗淺理解。
|----------------------------------------------------------------------------------------|
版權(quán)聲明 版權(quán)所有 @zhyiwww
引用請注明來源 http://www.aygfsteel.com/zhyiwww
|----------------------------------------------------------------------------------------|