您好,登錄后才能下訂單哦!
這篇“Java依賴注入的方式是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java依賴注入的方式是什么”文章吧。
Field Injection :@Autowired注解的一大使用場景就是Field Injection
Constructor Injection :構造器注入,是我們日常最為推薦的一種使用方式Setter Injection:
Setter Injection也會用到@Autowired注解,但使用方式與Field Injection有所不同,Field Injection是用在成員變量上,而Setter Injection的時候,是用在成員變量的Setter函數上
// Field Injection @Service("uploadService") public class UploadServiceImpl extends ServiceImpl<UploadDao, UploadEntity> implements UploadService { @Autowired private UploadDao uploadDao; }
// Constructor Injection @Service("uploadService") public class UploadServiceImpl extends ServiceImpl<UploadDao, UploadEntity> implements UploadService { private UploadDao uploadDao; UploadServiceImpl(UploadDao uploadDao){ this.uploadDao = uploadDao; } }
// Setter Injection @Service("uploadService") public class UploadServiceImpl extends ServiceImpl<UploadDao, UploadEntity> implements UploadService { private UploadDao uploadDao; @Autowired public void setUploadDao(UploadDao uploadDao){ this.uploadDao =uploadDao } }
1.是否進行循環依賴檢測
Field Injection:不檢測
Constructor Injection:自動檢測
Setter Injection:不檢測
循環依賴報錯: 當服務A需要用到服務B時,并且服務B又需要用到服務A時,Spring在初始化創建Bean時,不知道應該先創建哪一個,就會出現該報錯。
This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example
class ServerA{ @Autowired private ServerB b; } class ServerB{ @Autowired private ServerA a; }
如果使用構造方式注入,能夠精準的提醒你是哪兩個類產生了循環依賴 .異常報錯信息能夠迅速定位問題:
循環報錯解決辦法是使用 @Lazy注解 ,對任意一個需要被注入Bean添加該注解,表示延遲創建即可。
class ServerA{ @Autowired @Lazy private ServerB b; } class ServerB{ @Autowired @Lazy private ServerA a; }
以上就是關于“Java依賴注入的方式是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。