javascript
【闲谈】论Spring的三种依赖注入方式
知識點科普:
????????IOC和DI:IOC是控制反轉(zhuǎn),DI是依賴注入。DI是行為,而IOC是實現(xiàn)這一行為的容器。
????????循環(huán)依賴:指類與類之間互相依賴的情況,比如有類A和類B,類A中依賴類B,類B中依賴類A,由此導致項目啟動的時候,不能正常加載類的情況。
正文
Spring提供了三種依賴注入的方法,分別是:
1、屬性注入,即通過@Autowired注解注入依賴
@Autowired private UserDao userDao;2、setter注入
private UserDao userDao;@Autowired public void setUserDao(UserDao userDao){this.userDao = userDao; }3、構(gòu)造器注入
private final UserDao userDao;public UserController(UserDao userDao){this.userDao = userDao; }這三種依賴注入的優(yōu)缺點分別如下:
優(yōu)點:
1、屬性注入,能夠有效提高代碼簡潔性,讓依賴注入的事情交給IOC容器,省時省力。
2、setter注入,能夠通過懶加載的方式解決循環(huán)依賴,類中的依賴在需要用到的時候才會注入。另外,setter注入方式很靈活,注入的對象還能改變。
3、構(gòu)造器注入,相比以上兩種注入方式更加可靠,類中的所有依賴在實例化的時候都會注入,并且能夠使用final修飾,保證了依賴不為空不可變。另外,構(gòu)造器注入能夠自動檢測循環(huán)依賴的存在,便于優(yōu)化項目結(jié)構(gòu)。
缺點:
1、屬性注入,根據(jù)這種方式注入依賴的類過于依賴IOC容器,一旦脫離容器就無法實例化。換而言之,不能通過new方式創(chuàng)建該類的實例,因為該類中的依賴需要IOC來注入。
2、setter注入,這是三種注入方式中最靈活的,這個靈活就是它的缺點。setter注入的依賴不能保證依賴不可變。
3、構(gòu)造器注入,假如類中需要注入的依賴比較多,就會顯得構(gòu)造方法很臃腫,缺乏可讀性。另外,構(gòu)造器注入不能解決循環(huán)依賴問題。
總結(jié):
最不推薦使用的是屬性注入,除了省力以外沒有好處。
setter注入和構(gòu)造器注入各有優(yōu)劣,需要根據(jù)實際情況選擇。需要保證注入依賴的可靠性就用構(gòu)造器注入,需要保留注入依賴的靈活性就用setter注入。
總結(jié)
以上是生活随笔為你收集整理的【闲谈】论Spring的三种依赖注入方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse查看、修改tomcat端口
- 下一篇: windows远程连接发生身份验证错误