spring被忽略的精華-自定義註解

從事java開發也有小几年的時間了,中間有一段時間由於公司的需要沒有使用,直到最近項目的重構又用起來了。相信基本上java開發的同學都在不同程度上使用過spring,現在基本上面試也是一個必問的點。但是我通過這段時間和公司同事之間的配合開發,我發現一個問題。很大一部分人,都在追求新技術的使用,以會最使用最新的技術爲榮。就拿最近火得一套糊塗的springboot來說。因爲springboot以約定優於配置的理念,在很大程度上解放了我們的基礎編碼勞作。所以現在基本上不管項目大小,直接就是springboot搞起來。申明一下:這裏我不是說springboot有問題。springboot確實在中小型項目上有着不可比擬的優勢,不管在前期的項目工期還是在工作效率上都有很大的提升,一個註解就可以解決大部分問題。這就應了那句老話,物極必反 月滿盈虧,因爲協同開發不可避免需要接觸同事之間的代碼。很多人已經習慣了一個註解走天下的習慣。但是卻沒有了解他背後的實現,一旦遇見這個註解沒有或者這個註解實現不了我們需要的業務時就不知所措了。

就拿@service springboot中最常見的註解來說,很多人隨手都能寫出,作用就是加上這個註解在spring容器初始化的時候,會將註解在 這個類實例化對象在容器中。但是不知道大家有沒有想過一個問題爲什麼會產生這個效果?還有就是它和@Component是什麼關係?

其實很多時候我們只需要在平時寫代碼的時候多一份好奇,就會發現原來世界其實還是很簡單的。@service它的實現其實還是依靠@Component 因爲我也沒有深讀spring的源碼,但是從平時使用自定義註解的時候可以推測出,spring在容器初始化的時候會掃描帶有@Component的類並將它們實例化,默認是以類名第一個字母小寫。說到我又想到了自己開發的時候遇到的一個案例:當時我先類名的時候我的前兩個字母都是大寫的,而我默認有沒有加名字,然後我按照往常的邏輯通過名字的第一個字母小寫去獲取實例時,卻怎麼也獲取不到 知道我debug進去看spring容器中所有的對象名字我才發現,如果前幾個字母都是大寫,spring默認是不會將第一個字母小寫,而是和類名不變。O(∩_∩)O哈哈~ 題外話。迴歸正題

談談spring個人理解:
首先spring爲什麼要定義這麼多的註解。一方面是對於我們這種實力不夠但是又想在這方面混口飯吃的人提供的一種接口,爲什麼說是接口 因爲spring是一個不和業務耦合的框架,那麼我們使用它來進行業務開發的時候,其實就相當於對spring做二次開發,在它定義的這個大框框裏面。這也就是框架的由來。~~這裏是我瞎說的
其二 spring的源碼其實也不少,那麼怎麼才能將這麼多縱橫交錯的代碼使他們之間不耦合不衝突。其實這裏他也其到了不可忽視的作用。當然最重要的是spring的整體的架構設計,因爲我還沒有達到能指手畫腳它設計的地步。這裏我就不評述。
其實從上面我們就可以看出spring設計註解的用意,一方面提供指導一方面解耦。在我們現實開發中,其實這兩個因素往往能決定一個項目能走多遠。既然註解有這麼多的優點爲什麼在現實中的業務代碼開發中,我卻很少看到有能真正將註解和業務結合的案例。當然一方面是我的資歷問題可能接觸的少,可能這也體現了像我這樣處於中下階層的大部分編碼人的一個現狀。安於現狀。這也從側面說明了大部分優秀的開源項目都是國外提供的原因吧。

總結

今天的文章沒有代碼,寫這篇文章,是對自己的一個警示。並不是說我們怎麼怎麼。如果能明白我的意思的同學,我想是應該懂得。如果不懂得那就當看個笑話吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章