什麼樣的車才稱得上是真正的7座車?

老實說,現在我還是覺得自己選擇是正確的。GL8對於我來說,用於家用的時候,可以說是“好幫手”,用於商務的時候也是很給足我面子。每逢過年過節,都有親戚朋友來借我的GL8,出門去個自駕。(順便讓我的老款GL8空間亮相一下,見下圖)在這裏可以給想買GL8的朋友一些建議,對於新款的GL8,我這老車主有話要說:一、外在方面:宜商宜家以前還覺得買GL8太商務,但是現在看新款GL8,其設計宜商宜家都挺適合的,宜商的話,和豪華車沒什麼區別,甚至功能層面更實用,分分鐘給足你面子。

引言

本人是GL8車主,兩年前買的,當大家在一直追逐於SUV的時候,我選擇了MpV,一款能給我足夠的空間享受的愛車。GL8一次也沒給我打過臉,這次大學同學聚會更是如此。當我開車把大家送到酒店時,大家開始聊起開什麼車的話題,同學里有開BMW 5,也有開奧迪A4L,不過發現有很大部分人和我一樣選擇了7座車,漢蘭達、奧德賽、艾力紳、大眾夏朗等等,大家結婚生子甚至有些已經生了二胎后,都處於上有老下有小的階段,7座車正好符合了我們這群人的用車需求。

奧德賽 夏朗 艾力紳 漢蘭達

這是我的愛車——2014款的豪華商務旗艦版GL8(順便露一下臉)

從談話中,總結了我們這群7座車主同學們對於7座的共同訴求:(請叫我雷鋒,拿去不謝)

1. 乘坐空間大——滿足日常用車需要,典型的“421家庭”出行方便,甚至連家裡的寵物狗帶進來都沒問題。

2. 乘坐感要夠舒適——第二排空間足夠舒適,比起轎車或者兩廂車乘坐的人要舒服。

3. 儲物空間要大——很多車上沒辦法放進來的物品都能塞得下,甚至是自行車。

滿意的點總是那麼的相似,而吐槽的點確實各不相同,彷彿“車車都有一本難念的經“。(為了這文章,同學們紛紛發來的圖片,只供觀看,不許外傳。)

奧德賽車主說:我的奧德賽座椅空間還不錯,家裡用用完全篤定,開出去也夠掙面子。就是儲物空間讓我有點受不了,一輛如此大的MpV居然設計得這麼不人性化,就比如第二排吧,商務座椅挺舒服,但卻連一個杯架都沒有。還有就是后懸太硬,有幾次去外地經過路況差的地方顛簸挺大的,坐後排的人抱怨不是很舒服。隔音也一般,車子開稍快些會有點吵。

艾力紳車主說:我的艾力紳在儲物格的設計方面還好,二、三排空間還算過得去。但油箱太小,大塊頭耗油快,經常去加油站排隊加油有點苦逼。沒有電動尾門,不過後來我自己改裝了。另外,平時接小孩上下學挺方便的,二三排過道還有點小,尤其是三排進出不是很方便。我家小孩已經不是第一次跟我抱怨這個點,現在每次出趟遠門,都要考慮誰坐第三排的位置。

漢蘭達車主說:你們都沒我的苦逼,我的第三排,8成時間都是放倒,用來當儲物格。當初買車的時候就沒注意到,2-3-2結構的座椅,每次家人要坐到第三排的時候,都要把第2排座椅放倒才能爬進去,每次爸媽要坐進去的時候都費好大勁,老母的腿腳不好還是略折騰。麻煩也就算了,我有時候還要考慮安全問題。三排後面就是后擋風玻璃,我每次一踩剎車就會不自覺地看后視鏡,怕一不小心追尾,家人坐第三排直接成肉靶子。你們說,我這跟買個5座的有什麼區別。

奧德賽車主說:說到放東西我還有話要說,我家小寶貝3周歲,為了乘車安全我買了個兒童安全座椅,平時就鎖在二排,帶寶貝去公園的時候就直接坐上去。不過上周,客戶從北京飛過來,領導派我去機場接,我那安全座椅事先忘記拿下來了,結果到了發現來了一票人,我把安全座椅拆下來招呼客戶坐進去,卻發現後備箱根本塞不下,那叫一個尷尬啊,最後只能強行放三排,大家擠一擠了。

大眾夏朗車主(女)說:這有啥尷尬的,有次我和我老公出去,還帶着我們家那小泰迪,一開始給我抱着,後來大概是看到隔壁車的小泰迪激動了,一個乘我不注意,直接竄到第三排去,還開始亂跳抓椅子,那時候在高架上,我中間有排擋過不去,也沒辦法開車門,真是心疼死了。

艾力紳車主說:你們的問題都小事,最重要的是我們家經常一家出遊,坐滿人後,後排放的行李很多,經常後備箱是不夠位置放的,都要放車內,我是欲哭無淚啊!

這同學會聚的,都快成為一個七座車吐槽大會了,身為GL8車主的我,當他們問為我的時候,我只能笑而不語,他們說的這些問題,我都很少遇到。我只能說同學們說的這些問題,在我買車的時候都考慮過,在萬眾排除后,我選擇GL8。老實說,現在我還是覺得自己選擇是正確的。

GL8對於我來說,用於家用的時候,可以說是“好幫手”,用於商務的時候也是很給足我面子。每逢過年過節,都有親戚朋友來借我的GL8,出門去個自駕。(順便讓我的老款GL8空間亮相一下,見下圖)

在這裏可以給想買GL8的朋友一些建議,對於新款的GL8,我這老車主有話要說:

一、外在方面:宜商宜家

以前還覺得買GL8太商務,但是現在看新款GL8,其設計宜商宜家都挺適合的,宜商的話,和豪華車沒什麼區別,甚至功能層面更實用,分分鐘給足你面子。宜家主要是升級了很多,空間大,座椅舒適型高,乘坐舒服。

(全新GL8)

二、內在領域:大而舒適

重要的事情要再總結一遍:

1. 要顛覆一下大家對7座的刻板印象,不是僅僅有7個座位就可以稱作7座車了,還要每個坐在座位上的人坐得都舒服。全新GL8不單單在車內空間設計上下足功夫,據說座椅也升級了,具有腰托、腿托、椅背角度等電動調節功能,無論是小孩還是老人都能通過調節其功能,選擇最適合自己的坐姿。另外,座椅還配備了加熱、通風、按摩、扶手調節及側翼六向可調航空頭枕,據了解,很多老一輩對這配備贊不絕口,都說再也不用擔心長途顛簸路段,有了全新GL8,長途坐車再也不是事。

2. 坐滿7人的前提下,還要能放下東西,要不出門自駕時,人去到,東西沒帶齊,也挺苦逼的。全新GL8應該是7座車裡,為數不多能同時滿足這兩個需求的車型。具不少試駕員表示,平常春節個老家、出門來個自駕,後備箱放個自行車、兒童座椅、28寸的旅行箱等等都沒問題。

3. 另外,通過性強,座位之間能方便車內乘坐人員走動。這個點從我的同學吐槽裏面,是很多同級別車型所沒有的。具實測全新GL8第二排座椅下部中間的寬度有約450px,這個寬度一般成年人側身是可以自由穿行的。可能單這個點,就可以完爆其他競品車型。

4. 方便長輩小孩上下車以及人性化的第三排設計。全新GL8在這點也很人性化,底盤不會太高,車高合適,老人小孩上下車都可以說“so easy”。值得表揚的還有第三排座椅坐墊高度比其他車型要優化不少,這樣如果是老人小孩坐在第三排,也不會覺得好像整個人好像窩在裏面,很不舒服。另外,第三排還配備了中央扶手,高度也合適,這也是相對老款做的提升,大大提升第三排乘坐舒適度。

5. 全車人的安全性。確實,出現像上面同學說到的,買了7座只能當5座開,有點尷尬。這個點在全新GL8上也表現的挺好。除了第三排與后擋風玻璃間的距離大,全新GL8還配備了主被動安全、智慧安全系統及其他提高駕駛安全性的配備,另外,全車共配備了8安全氣囊。這些配置對於全車人的安全方面無疑是提供了全面的保護。

扯了這麼多,我承認我是有私心的,我就是想找到GL8組織,讓更多GL8車主一起體驗這款車。有機會還能組個團,大家一起開GL8集體出去自駕。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

9萬起能買的“德系”SUV?這車上市后能比肩哈弗H6嗎

而且中控也採用銀色材質的裝飾。包括方向盤也運用了鋼琴烤漆做細節點綴,所以整個內飾給人一種比較有檔次感的體驗。競爭對手分析:銷量之王 哈弗H6指導價:8。88-16。28萬作為常年的SUV銷量冠軍,哈弗H6和新景逸X5一樣很注重其內飾用料和設計做工等方面。

日前,東風風行官方發布信息,全新的景逸X5將會在今年12月17日正式上市!在幾天後,這款SUV車型就會公布它的正式售價以及詳細配置信息。

下面我們就深入了解一下這款車型,還有看看它和主要對手的差別!

新景逸X5採用三橫幅鍍鉻前格柵設計,這讓它視覺效果很寬,格柵和大燈連為一體。看起來的確時尚、漂亮,雖然有些德系SUV的影子,不過它看着很大氣,車身也顯大,這顯然是消費者比較喜歡的設計類型。

側面和尾部的設計稜角分明,視覺效果偏厚重。車尾造型比較具有層次感,其尾燈加入了LED光源,另外排氣採用了雙邊共兩出的布局形式。

其實,它採用了LQ-CMF平台的技術,具體體現在它採用了前副車架加強梁和前懸架鋁合金上擺臂等細節。所以比起老款車型,它的變化真的很大。

動力方面,根據目前的信息來看,景逸X5將會搭配1.6L、2.0L兩款自然吸氣發動機。而傳動方面將採用5擋手動或CVT變速箱!同級別車型大多採用了小排量增壓發動機,所以景逸X5的推出還是要進行差異化競爭。

在內飾方面,它的整體設計、材質運用可能會給你一種驚艷的感覺。懸浮式中控屏、整體貫穿式空調出風口,看上去比較時尚。而且中控也採用銀色材質的裝飾。

包括方向盤也運用了鋼琴烤漆做細節點綴,所以整個內飾給人一種比較有檔次感的體驗。

競爭對手分析:

銷量之王 哈弗H6

指導價:8.88-16.28萬

作為常年的SUV銷量冠軍,哈弗H6和新景逸X5一樣很注重其內飾用料和設計做工等方面。而H6主力車型採用1.5T+6AT/6MT的動力總成。另外哈弗H6的銷售渠道建設程度很高,這方面的優勢較大。

優質自主車 傳祺GS4

指導價:9.98-16.18萬

堅持自主研發的傳祺GS4,銷量也表現強勢,頗有些爆款車型的感覺。它的設計年輕、前衛,也具有自我特色。所以新景逸X5上市后的表現,需要大家多多關注!

編者語:

新景逸X5比起老款車型有了翻天覆地般的變化,9-12萬的預售價不算低,所以在正式上市后的正式售價我估計會定在8.3-11.5萬左右,畢竟它要用更高的性價比和哈弗H6競爭!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

紅燈也可以掉頭?老司機都會犯傻!

3禁左即是禁止掉頭左轉與掉頭是有一定關係的,因為大多數情況下掉頭需要佔用左轉車道,所以禁止左轉意味着不能掉頭,除非該路口除了有“禁止左轉”的標誌外,還同時有“允許掉頭”的標誌,則可掉頭。下面這些情況可以掉頭1路口有掉頭標誌的可掉頭按照信號燈的指示進行掉頭,如果沒有信號燈,則根據路況有左轉標誌的,在不影響其他車輛通行或阻礙行人的情況進行掉頭,在這裏得提醒一下,有些掉頭車道是在最右側的。

今天小編開心的開着五菱宏光去兜風,準備右轉的時候在一個紅燈路口停了下來,後方的車輛不停的按着喇叭來催前面第一輛車輛,看來又是一個新手,不知道沒方向指示的紅燈是允許掉頭的。

但是今天我們討論的是紅燈能否掉頭的問題,有禁止標誌的路口大夥都看得懂,但是沒明確指示的就不一定了,一起來學習一下吧,剛拿到駕照的朋友再也不擔心給人家嗶嗶的催個不停了。

車輛掉頭規定

一開始我們先來看一下違章掉頭將會受到什麼樣的處罰,駕駛機動車違反禁令標誌、禁止、標線指示的,將一次記3分,部分地區還將罰200元。

禁止掉頭的九種情況

1

斑馬線處禁止掉頭

有些道路上設有斑馬線,雖然這一塊地方沒有明確禁止掉頭標識,但是機動車是不允許在斑馬線上掉頭的,就算在允許掉頭的路口,也要越過斑馬線才可以掉頭。

2

黃色實線禁止掉頭

在行至無“禁止掉頭”標誌的路口,是允許掉頭的,但是要注意道路中心線的虛實,如果是單黃實線或者雙黃實線都是禁止掉頭的。

3

禁左即是禁止掉頭

左轉與掉頭是有一定關係的,因為大多數情況下掉頭需要佔用左轉車道,所以禁止左轉意味着不能掉頭,除非該路口除了有“禁止左轉”的標誌外,還同時有“允許掉頭”的標誌,則可掉頭。

下面這些情況可以掉頭

1

路口有掉頭標誌的可掉頭

按照信號燈的指示進行掉頭,如果沒有信號燈,則根據路況有左轉標誌的,在不影響其他車輛通行或阻礙行人的情況進行掉頭,在這裏得提醒一下,有些掉頭車道是在最右側的。

2

黃色網格線可掉頭

黃色網格線大家可能都很清楚,就是嚴禁停車的意思,但在該區域內,只要沒有設置中間隔離護欄,是可以掉頭的,等同於“允許掉頭”的意思。

3

黃色虛實線可掉頭

如果是一虛一實的黃色線,是可以掉頭的,虛線一側車輛可向實線一側通行,實線一側的車輛是不允許向虛線一邊通行的。

總結:考試背得滾瓜爛熟的交規一畢業就給回教練了,加上一些馬路上交通標支模糊指引不明確,很容易造成新手犯錯,還會被後面車輛“嗶”個不停,希望通過這篇文章學習后,大家可以對掉頭的情況了如指掌。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

「殭屍火」來襲? 破紀錄野火再臨北極圈 碳匯恐不保

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

※別再煩惱如何寫文案,掌握八大原則!

中國紅蘿蔔殘留農藥超標 日本發出檢查令

摘錄自2020年6月15日中央社報導

因為從中國進口的紅蘿蔔陸續查出含有超過安全標準的殘留農藥,日本政府今(15日)依法發出檢查令,今後中國產的紅蘿蔔都須接受檢查。

「讀賣新聞」報導,日本厚生勞動省今天根據食品衛生法發出檢查命令,今後如果進口中國產的紅蘿蔔(包含加工品),業者有義務須接受紅蘿蔔殘留農藥的檢查。

生活環境
國際新聞
日本
蘿蔔
殘留農藥
食品安全

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

疫情拖累原油需求 英國石油損失恐達5200億元

摘錄自2020年6月15日中央社報導

英國石油公司(BP)今(15日)預警,第2季將承受最多175億美元(約新台幣5200億元)損失。因武漢肺炎(COVID-19)疫情帶來「持續」經濟衝擊,重創全球石油需求。

受疫情影響,英國石油日前才公布裁減1萬個職位的計畫,今天又發布聲明表示,現行季將承受130億到175億美元的非現金資產減值和沖銷。

能源轉型
能源議題
國際新聞
英國
疫情
原油
武漢肺炎
經濟衝擊
疫情看氣候與能源
石油

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

法國擬開採莫三比克天然氣 環團批製造氣候炸彈

摘錄自2020年6月15日中央社報導

法國石油業巨擘道達爾(Total)正在莫三比克發展開採天然氣的大型計畫,環保組織「地球之友」今(15日)指控法國此舉無異是在當地放置一枚「氣候定時炸彈」。

法新社報導,「地球之友」(Friends of the Earth)一份報告名為「產業的意外之財,莫三比克的詛咒:法國把莫三比克推進氣阱」(A windfall for the industry, a curse for the country: France Thrusts Mozambique into the gas trap)。報告指出,2010年代初在莫三比克的北海岸外海水面下發現巨大的天然氣儲量,開採總投資金額將達600億美元。

「地球之友」指控,「法國這項陰謀是代表法國能源產業與銀行家的經濟利益……迫使另個非洲國家仰賴化石燃料」。

這份報告指出,法國正研擬三個天然氣計畫,「釋放出的溫室氣體可能相當於法國一年溫室氣體排放量的7倍,更是莫三比克目前年排放量的49倍」。

能源議題
能源轉型
國際新聞
法國
天然氣
油氣開採

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

※回頭車貨運收費標準

聯合國環境署:清潔能源是新冠疫情後最具成本效益的投資之一 

摘錄自2020年6月11日聯合國新聞報導

聯合國環境署在6月10日發布的《2020年全球可再生能源投資趨勢》顯示,新型冠狀病毒對化石燃料行業造成嚴重衝擊。而可再生能源比以往更具成本效益,為各國在經濟復甦中優先考慮清潔能源提供機會,使世界更接近實現《巴黎協定》的目標。

報告顯示可再生能源裝機成本創新低,意味著未來,可再生能源領域的投資將實現更高的產能。得益於技術進步、規模經濟和激烈競爭,風能和太陽能的成本不斷下降。2019年下半年,新建太陽能發電廠的電力成本比10年前降低了83%。

環境署執行主任安德森(Inger Andersen)表示,利用可再生能源價格不斷下跌的優勢,將清潔能源置於後疫情時代經濟復甦方案的核心,是應對全球疫情的最佳保險政策。

能源議題
能源轉型
國際新聞
美國
清潔能源
聯合國
可再生能源發電
巴黎協定

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

【Spring註解驅動開發】使用@Lazy註解實現懶加載

寫在前面

Spring在啟動時,默認會將單實例bean進行實例化,並加載到Spring容器中。也就是說,單實例bean默認在Spring容器啟動的時候創建對象,並將對象加載到Spring容器中。如果我們需要對某個bean進行延遲加載,我們該如何處理呢?此時,就需要使用到@Lazy註解了。

項目工程源碼已經提交到GitHub:https://github.com/sunshinelyz/spring-annotation

懶加載

懶加載就是Spring容器啟動的時候,先不創建對象,在第一次使用(獲取)bean的時候,創建並使用對象,大家是不是想到了在【設計模式】專題中的單例模式呢?對單例模式不太了解的同學可以猛戳《淺談JAVA設計模式之——單例模式(Singleton)》,也可以查看《設計模式匯總——你需要掌握的23種設計模式都在這兒了!》來系統學習每種設計模式。

非懶加載模式

此時,我們將PersonConfig2類的配置修改成單實例bean,如下所示。

package io.mykit.spring.plugins.register.config;

import io.mykit.spring.bean.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author binghe
 * @version 1.0.0
 * @description 測試@Scope註解設置的作用域
 */
@Configuration
public class PersonConfig2 {
    @Bean("person")
    public Person person(){
        System.out.println("給容器中添加Person....");
        return new Person("binghe002", 18);
    }
}

接下來,在SpringBeanTest類中創建testAnnotationConfig5()方法,如下所示。

@Test
public void testAnnotationConfig5(){
    ApplicationContext context = new AnnotationConfigApplicationContext(PersonConfig2.class);
    System.out.println("IOC容器創建完成");
}

運行SpringBeanTest類中的testAnnotationConfig5()方法,輸出的結果信息如下所示。

給容器中添加Person....
IOC容器創建完成

可以看到,單實例bean在Spring容器啟動的時候就會被創建,並加載到Spring容器中。

懶加載模式

我們在PersonConfig2的person()方法上加上@Lazy註解將Person對象設置為懶加載,如下所示。

package io.mykit.spring.plugins.register.config;

import io.mykit.spring.bean.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;

/**
 * @author binghe
 * @version 1.0.0
 * @description 測試@Scope註解設置的作用域
 */
@Configuration
public class PersonConfig2 {

    @Lazy
    @Bean("person")
    public Person person(){
        System.out.println("給容器中添加Person....");
        return new Person("binghe002", 18);
    }
}

此時,我們再次運行SpringBeanTest類中的testAnnotationConfig5()方法,輸出的結果信息如下所示。

IOC容器創建完成

可以看到,此時,只是打印出了“IOC容器創建完成”,說明此時,只創建了IOC容器,並沒有創建bean對象。

那麼,加上@Lazy註解后,bean是何時創建的呢?我們在SpringBeanTest類中的testAnnotationConfig5()方法中獲取下person對象,如下所示。

@Test
public void testAnnotationConfig5(){
    ApplicationContext context = new AnnotationConfigApplicationContext(PersonConfig2.class);
    System.out.println("IOC容器創建完成");
    Person person = (Person) context.getBean("person");
}

此時,我們再次運行SpringBeanTest類中的testAnnotationConfig5()方法,輸出的結果信息如下所示。

IOC容器創建完成
給容器中添加Person....

說明,我們在獲取bean的時候,創建了bean對象並加載到Spring容器中。

那麼,問題又來了,只是第一次獲取bean的時候創建bean對象嗎?多次獲取會不會創建多個bean對象呢?我們再來完善下測試用例,在在SpringBeanTest類中的testAnnotationConfig5()方法中,再次獲取person對象,並比較兩次獲取的person對象是否相等,如下所示。

IOC容器創建完成
給容器中添加Person....
true

從輸出結果中,可以看出使用@Lazy註解標註后,單實例bean對象只是在第一次從Spring容器中獲取對象時創建,以後每次獲取bean對象時,直接返回創建好的對象。

總結

懶加載,也稱延時加載。僅對單例bean生效。單例bean是在Spring容器啟動的時候加載的,添加@Lazy註解后就會延遲加載,在Spring容器啟動的時候並不會加載,而是在第一次使用此bean的時候才會加載,但當你多次獲取bean的時候不會重複加載,只是在第一次獲取的時候會加載,這不是延遲加載的特性,而是單例Bean的特性。

好了,咱們今天就聊到這兒吧!別忘了給個在看和轉發,讓更多的人看到,一起學習一起進步!!

項目工程源碼已經提交到GitHub:https://github.com/sunshinelyz/spring-annotation

寫在最後

如果覺得文章對你有點幫助,請微信搜索並關注「 冰河技術 」微信公眾號,跟冰河學習Spring註解驅動開發。公眾號回復“spring註解”關鍵字,領取Spring註解驅動開發核心知識圖,讓Spring註解驅動開發不再迷茫。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※回頭車貨運收費標準

Zookeeper實現服務註冊/發現

what that?

Zookeeper在分佈式開發中使用頻繁,但許多框架都對其進行了封裝,初學者可能無法較好的理解其工作原理,該文章演示了使用Zookeeper實現服務註冊,服務發現的簡單demo,希望能達到拋磚引玉的效果;

why need RegisterCenter?

之所以需要訪問註冊和服務發現是因為分佈式系統中,服務之間需要相互調用,但若每個服務自己維護一份依賴的服務信息的話,就顯得很麻煩,且自身維護的數據無法保證其實時性,當依賴的服務信息發生變更時,無法及時獲取更新,解決方案就是引入一個註冊中心,服務提供方將自己的信息寫入到註冊中心,服務使用方從註冊中心來獲取服務信息; 如下圖:

client表示服務使用方,server表示服務提供方

實現的效果: 客戶端可自動發現服務信息,當服務狀態發生變化時(上線,下線,更換地址),客戶端可以及時響應變化,效果如下圖:

效果演示

實現

  1. 首先保證Zookeeper以安裝啟動,且可以正常訪問

  2. 創建Maven項目並添加Zookeeper的Java客戶端依賴(注意版本號需>3.6)

    				<dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.6.1</version>
            </dependency>
    
  3. 編寫服務提供方

    package com.jerry;
    
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.ZooDefs;
    import org.apache.zookeeper.ZooKeeper;
    import org.apache.zookeeper.data.ACL;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.*;
    import java.nio.charset.StandardCharsets;
    import java.util.ArrayList;
    import java.util.Enumeration;
    
    import static java.net.InetAddress.getLocalHost;
    
    public class UserService {
    
        public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
            new UserService().serving();
        }
    
        public void serving() throws IOException, KeeperException, InterruptedException {
            //獲取本機ip地址
            String ip = null;
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface ni = (NetworkInterface) networkInterfaces.nextElement();
                Enumeration<InetAddress> nias = ni.getInetAddresses();
                while (nias.hasMoreElements()) {
                    InetAddress ia = (InetAddress) nias.nextElement();
                    if (!ia.isLinkLocalAddress() && !ia.isLoopbackAddress() && ia instanceof Inet4Address) {
                        ip = ia.getHostAddress();
                    }
                }
            }
            int port = 8988;
    
            //啟動服務
            ServerSocket socket = new ServerSocket(port);
            System.out.println("服務器已啟動...");
            //註冊服務
            serverRegister(ip, port);
            //處理請求
            clientHandler(socket);
        }
    
        private void clientHandler(ServerSocket socket) throws IOException {
            while (true) {
                Socket accept = socket.accept();
                InputStream inputStream = accept.getInputStream();
                byte[] barr = new byte[1024];
                while (true) {
                    int size = inputStream.read(barr);
                    if (size == -1) {
                        //System.out.println("客戶端已關閉..");
                        accept.close();
                        break;
                    }
                    String s = new String(barr, 0, size);
                    //輸出客戶端消息
                    System.out.println(accept.getInetAddress().getHostAddress() + ": " + s);
                }
            }
    
        }
    
        private void serverRegister(String ip, int port) throws IOException, KeeperException, InterruptedException {
            //註冊服務
            ZooKeeper zooKeeper = new ZooKeeper("10.211.55.4: 2181",3000, null);
            try {
                ArrayList<ACL> acl = new ArrayList<>();
                acl.add(new ACL(31, ZooDefs.Ids.ANYONE_ID_UNSAFE));
                zooKeeper.create("/userServer", (ip + ":" + port).getBytes(StandardCharsets.UTF_8), acl, CreateMode.EPHEMERAL);
                System.out.println("服務發布成功!");
            } catch (KeeperException | InterruptedException e) {
                e.printStackTrace();
                throw e;
            }
        }
    }
    
  4. 編寫服務服務使用方

    package com.yyh;
    
    import org.apache.zookeeper.*;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetSocketAddress;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class UserClient implements Watcher {
        String node = "/userServer"; //服務信息所在的節點 服務提供方和服務消費方一致
        private ZooKeeper zooKeeper;
        String server_ip;
        int server_port;
    
        public static void main(String[] args) throws Exception {
            //開始服務監聽
            UserClient userClient = new UserClient();
            userClient.run();
            //當訪問可用時與服務交互
            Scanner scanner = new Scanner(System.in);
            while (true){
                System.out.println("輸入要發送的信息(e:退出)");
                String text = scanner.next();
                if (text.equals("e"))System.exit(-1);
                if (userClient.server_ip == null){
                    System.err.println("沒有可用的服務...");
                }else {
                    userClient.sendToServer(text);
                }
            }
        }
        
        private void run() throws Exception {
            //連接zookeeper
            zooKeeper = new ZooKeeper("10.211.55.4:2181", 3000, null);
            //嘗試獲取服務信息
            getServerInfo();
            //添加對服務信息的永久監聽
            zooKeeper.addWatch(node,this,AddWatchMode.PERSISTENT);
        }
    
        //獲取服務信息
        private void getServerInfo()  {
            try {
                byte[] data = zooKeeper.getData(node, false, null);
                String[] infos = new String(data).split(":");
                server_ip = infos[0];
                server_port = Integer.parseInt(infos[1]);
                System.out.println("獲取服務信息成功!");
                System.out.println(server_ip+":"+ server_port);
            } catch (KeeperException e) {
                System.err.println("服務信息不存在! 等待服務上線........");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        //當節點狀態發送變化時將執行該方法(通知處理)
        @Override
        public void process(WatchedEvent event) {
            if (event.getPath().equals(node)) {
                //根據具體邏輯處理不同的事件類型,此處只關心節點的創建刪除和更新
                if (event.getType() == Event.EventType.NodeCreated) {
                    System.err.println("服務上線了");
                    getServerInfo();
                } else if (event.getType() == Event.EventType.NodeDataChanged) {
                    System.err.println("服務更新了");
                    getServerInfo();
                }else if (event.getType()== Event.EventType.NodeDeleted){
                    server_ip = null;
                    server_port = 0;
                    System.err.println("服務下線了");
                }
            }
        }
    
        public void sendToServer(String text) {
            InetSocketAddress server_address = new InetSocketAddress(server_ip, server_port);
            Socket socket = new Socket();
            try {
                socket.connect(server_address);
                //System.out.println("連接服務器成功!");
                OutputStream outputStream = socket.getOutputStream();
                outputStream.write(text.getBytes());
                System.out.println("消息發送成功!");
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
  5. 打包服務端代碼,該步驟可忽略,僅為了測試客戶端正確性, 為了在打包時附帶其全部依賴,此處藉助Spring的打包插件,在pom中添加以下內容:

    		<build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>1.5.6.RELEASE</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    注意:Spring-boot打包插件會自動獲取項目中的主函數,必須保證主函數只有一個,所以需要暫時註釋客戶端的主函數,最後執行maven的package,得到jar包

  6. 將jar上傳至虛擬機並運行

    java -jar ZookeeperTest-1.0-SNAPSHOT.jar
    

    若沒有其他問題則客戶端依然可以正常連接服務器發送消息;

以上便是使用Zookeeper實現服務註冊和服務發現的具體步驟,在實際開發中,我們可能還會將提供的服務部署為集群,這時可將集群中的各個服務信息作為子節點註冊到指定節點下,客戶端監聽該節點變化,獲取子節點列表從而獲取到服務列表,還可以在此基礎上加上負載均衡算法實現對服務列表的合理訪問; 如圖:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

※產品缺大量曝光嗎?你需要的是一流包裝設計!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!