spring注入的物件和new的物件到底有啥區別

2021-08-22 04:49:42 字數 1022 閱讀 9378

在使用springboot過程中,想使用jdbc模板,就是直接在service層注入乙個jdbctemplate屬性,然後直接使用,但是又想封裝一下,就建立乙個類,類中有jdbctemplate屬性,然後再service中呼叫我封裝的jdbc,剛開始沒有封裝方法的情況下,想在service中直接想注入我的類,然後呼叫我的類中的jdbc,什麼註解都標註好了,結果一直空指標異常,還以為不好使呢,其實這裡面有個很大的問題,就是註解注入的物件和new的物件到底有啥區別;

我們知道,new乙個物件的時候,初始化順序是,父類靜態塊》子類靜態塊》 父類屬性(先系統預設值,後直接你賦予的值) >父類構造器》子類屬性》子類構造器

但是當有個註解在屬性上的時候,會是啥情況呢?

@repository

public class a

}

@restcontroller

public class b

}

@component

public class c

public void foo()

}

結論:注入的物件,只會呼叫空參建構函式,且這個物件的所有屬性都是預設值,自己手動賦予的值不會被使用,

所以在a中的c類,在b中呼叫a的時候,建立的a物件的屬性都是預設值,所以a物件雖然有了,但是a的屬性c卻是null,所以在b中直接this.a.c.method()是會報null指標異常的,且是c是null的發生原因。

解決方式:c在a中新增get方法,然後b中使用a.getc()即可獲得c的物件,且c的物件也是spring注入的。

備註:以上結論和說明,只是個人總結,包括new乙個物件初始化順序,可能不嚴謹,沒有時間驗證,以後會完善

spring依賴注入 和new的物件的管理

問題 乙個業務類交給spring管理,並自動注入了其他業務類作為屬性,方法中通過全域性屬性呼叫其他業務類的方法。當該業務類是通過new獲取的情況下,該例項的屬性會是null 不存在依賴注入例項 呼叫方法就會報空指標。為保證該方法無論是被new出來的物件呼叫還是被spring容器物件引用都能正常使用,...

Spring物件屬性注入

注入 物件屬性賦值 一 基礎資料的set注入 1 實體類user public class user 對user類新增setter getter 2 配置檔案,比如叫beans.xml 25 tom 123456 3 測試類usertest public class usertest 二 基礎資料型...

spring注入成員物件

就是將物件注入到另外乙個物件中。這個樣例就是有乙個學校類,學校類中有乙個校長類,最後使用測試檔案輸出學校類中的資訊。結構 學校類package com.test.springgetset public class school public void setpresent present prese...