版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第Spring循環(huán)依賴的解決方案詳解目錄簡介方案1.Feild注入單例(@AutoWired)方案2.構(gòu)造器注入+@Lazy方案3.Setter/Field注入單例方案4.@PostConstruct方案5.實(shí)現(xiàn)ApplicationContextAware與InitializingBean
簡介
說明
本文用實(shí)例介紹如何解決Spring的循環(huán)依賴問題。
相關(guān)網(wǎng)址
Spring循環(huán)依賴之問題復(fù)現(xiàn)詳解
公共代碼
packagecom.example.controller;
importcom.example.tmp.A;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RestController;
@RestController
publicclassHelloController{
@Autowired
privateAa;
@GetMapping("/test1")
publicStringtest1(){
returna.getTest();
方案1.Feild注入單例(@AutoWired)
代碼
packagecom.example.tmp;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
@Component
publicclassA{
@Autowired
privateBb;
privateStringname="Tony";
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
=name;
publicStringgetTest(){
returnb.getAge().toString()+name;
packagecom.example.tmp;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
@Component
publicclassB{
@Autowired
privateAa;
privateIntegerage=20;
publicIntegergetAge(){
returnage;
publicvoidsetAge(Integerage){
this.age=age;
測試
啟動不報錯。
postman訪問:http://localhost:8080/test1
后端結(jié)果:不報錯
postman結(jié)果:20Tony
方案2.構(gòu)造器注入+@Lazy
延遲加載:在注入依賴時,先注入代理對象,當(dāng)首次使用時再創(chuàng)建對象完成注入。
代碼
packagecom.example.tmp;
importorg.springframework.context.annotation.Lazy;
importorg.springframework.stereotype.Component;
@Component
publicclassA{
privateBb;
publicA(@LazyBb){
this.b=b;
privateStringname="Tony";
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
=name;
publicStringgetTest(){
returnb.getAge().toString()+name;
packagecom.example.tmp;
importorg.springframework.context.annotation.Lazy;
importorg.springframework.stereotype.Component;
@Component
publicclassB{
privateAa;
publicB(@LazyAa){
this.a=a;
privateIntegerage=20;
publicIntegergetAge(){
returnage;
publicvoidsetAge(Integerage){
this.age=age;
測試
啟動不報錯。
postman訪問:http://localhost:8080/test1
后端結(jié)果:不報錯
postman結(jié)果:20Tony
方案3.Setter/Field注入單例
代碼
packagecom.example.tmp;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
@Component
publicclassA{
privateBb;
privateStringname="Tony";
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
=name;
publicStringgetTest(){
returnb.getAge().toString()+name;
publicBgetB(){
returnb;
@Autowired
publicvoidsetB(Bb){
this.b=b;
packagecom.example.tmp;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
@Component
publicclassB{
privateAa;
privateIntegerage=20;
publicIntegergetAge(){
returnage;
publicvoidsetAge(Integerage){
this.age=age;
publicAgetA(){
returna;
@Autowired
publicvoidsetA(Aa){
this.a=a;
測試
啟動不報錯。
postman訪問:http://localhost:8080/test1
后端結(jié)果:不報錯
postman結(jié)果:20Tony
方案4.@PostConstruct
代碼
packagecom.example.tmp;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
importjavax.annotation.PostConstruct;
@Component
publicclassA{
@Autowired
privateBb;
@PostConstruct
publicvoidinit(){
b.setA(this);
privateStringname="Tony";
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
=name;
publicStringgetTest(){
returnb.getAge().toString()+name;
packagecom.example.tmp;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
@Component
publicclassB{
@Autowired
privateAa;
privateIntegerage=20;
publicIntegergetAge(){
returnage;
publicvoidsetAge(Integerage){
this.age=age;
publicAgetA(){
returna;
publicvoidsetA(Aa){
this.a=a;
測試
啟動不報錯。
postman訪問:http://localhost:8080/test1
后端結(jié)果:不報錯
postman結(jié)果:20Tony
方案5.實(shí)現(xiàn)ApplicationContextAware與InitializingBean
代碼
packagecom.example.tmp;
importorg.springframework.beans.BeansException;
importorg.springframework.beans.factory.InitializingBean;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.ApplicationContextAware;
importorg.springframework.stereotype.Component;
@Component
publicclassAimplementsApplicationContextAware,InitializingBean{
privateBb;
privateApplicationContextcontext;
privateStringname="Tony";
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
=name;
publicStringgetTest(){
returnb.getAge().toString()+name;
@Override
publicvoidafterPropertiesSet()throwsException{
this.b=context.getBean(B.class);
@Override
publicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{
this.context=applicationContext;
packagecom.example.tmp;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
@Component
publicclassB{
@Autowired
priva
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026浙江開化農(nóng)村商業(yè)銀行寒假實(shí)習(xí)生社會實(shí)踐活動招募備考考試試題附答案解析
- 2025廣東佛山市順德區(qū)沙滘初級中學(xué)第二學(xué)期臨聘教師招聘備考考試試題附答案解析
- 2026福建南平市建陽區(qū)文化體育和旅游局招聘1人備考考試題庫附答案解析
- 物業(yè)公司生產(chǎn)責(zé)任制度
- 原材料生產(chǎn)過程管理制度
- 2026重慶市萬州區(qū)燕山鄉(xiāng)人民政府招聘全日制公益性崗位1人備考考試試題附答案解析
- 倉鼠生產(chǎn)管理員工制度
- 生產(chǎn)企業(yè)黑名單制度
- 2026年河北承德市教育局公開選聘急需緊缺學(xué)科教師39名參考考試題庫附答案解析
- 戒毒所生產(chǎn)車間制度
- 河堤植草護(hù)坡施工方案
- 2025中國氫能源產(chǎn)業(yè)發(fā)展現(xiàn)狀分析及技術(shù)突破與投資可行性報告
- 高校行政管理流程及案例分析
- 高效節(jié)水灌溉方式課件
- 基坑安全工程題庫及答案解析
- 《人間充質(zhì)基質(zhì)細(xì)胞來源細(xì)胞外囊泡凍干粉質(zhì)量要求》(征求意見稿)
- 2025年海南省中級經(jīng)濟(jì)師考試(工商管理專業(yè)知識和實(shí)務(wù))能力提高訓(xùn)練試題庫及答案
- 鄉(xiāng)鎮(zhèn)村監(jiān)會培訓(xùn)課件
- 入團(tuán)申請書教學(xué)課件
- 松下微波爐NN-DS581M使用說明書
- 2025年江蘇省招聘警務(wù)輔助人員考試真題及答案
評論
0/150
提交評論