天天看點

spring(四)之基于注解(Annotation-based)的配置注解

<a href="#%E6%B3%A8%E8%A7%A3" target="_blank">注解</a>

<a href="#autowired" target="_blank">Autowired</a>

<a href="#%E5%8F%AF%E4%BB%A5%E7%94%A8%E4%BA%8E%E4%BC%A0%E7%BB%9F%E7%9A%84setter-%E6%96%B9%E6%B3%95" target="_blank">可以用于傳統的setter 方法</a>

<a href="#%E7%94%A8%E4%BA%8E%E4%BB%A5%E5%B1%9E%E6%80%A7%E4%B8%BA%E5%8F%82%E6%95%B0%E5%A4%9A%E4%B8%AA%E5%8F%82%E6%95%B0%E7%9A%84%E6%96%B9%E6%B3%95" target="_blank">用于以屬性為參數多個參數的方法</a>

<a href="#%E7%94%A8%E4%BA%8E%E6%9E%84%E9%80%A0%E5%99%A8%E4%B8%8E%E5%AD%97%E6%AE%B5" target="_blank">用于構造器與字段</a>

<a href="#applicationcontext" target="_blank">ApplicationContext</a>

<a href="#%E7%94%A8%E4%BA%8E%E9%9B%86%E5%90%88%E7%B1%BB%E5%9E%8B" target="_blank">- 用于集合類型</a>

<a href="#maps" target="_blank">Maps</a>

<a href="#%E7%BC%BA%E7%9C%81%E6%83%85%E5%86%B5" target="_blank">預設情況</a>

<a href="#qualifier%E6%B3%A8%E8%A7%A3" target="_blank">Qualifier注解</a>

<a href="#%E5%88%9B%E5%BB%BA%E6%82%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E9%99%90%E5%AE%9A%E5%99%A8%E6%B3%A8%E8%A7%A3" target="_blank">建立您自定義的限定器注解</a>

<a href="#%E5%AE%9A%E4%B9%89%E4%B8%80%E4%B8%AA%E6%B3%A8%E8%A7%A3%E6%97%B6%E6%8F%90%E4%BE%9Bqualifier%E6%B3%A8%E8%A7%A3" target="_blank">定義一個注解時提供Qualifier注解</a>

<a href="#%E7%84%B6%E5%90%8E%E5%B0%86%E8%BF%99%E4%B8%AA%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E9%99%90%E5%AE%9A%E5%99%A8%E4%B8%8E%E5%8F%82%E6%95%B0%E7%94%A8%E4%BA%8E%E8%87%AA%E5%8A%A8%E8%BF%9E%E6%8E%A5%E7%9A%84%E5%AD%97%E6%AE%B5" target="_blank">然後将這個自定義的限定器與參數用于自動連接配接的字段</a>

<a href="#%E6%8F%90%E4%BE%9B%E4%BF%A1%E6%81%AF%E7%BB%99%E5%80%99%E9%80%89%E7%9A%84-bean-%E7%9A%84%E5%AE%9A%E4%B9%89" target="_blank">提供資訊給候選的 bean 的定義</a>

<a href="#resource-a" target="_blank">Resource a</a>

<a href="#postconstruct-%E4%B8%8E-predestroy" target="_blank">PostConstruct 與 PreDestroy</a>

<a href="#postconstruct%E8%AF%B4%E6%98%8E" target="_blank">POSTconstruct說明</a>

<a href="#preconstruct%E8%AF%B4%E6%98%8E" target="_blank">preconstruct說明</a>

這裡講的注解有下面幾個

- @Autowired

- @Qualifier(” “)

- @Genre(” “)

- @Offline

- @Resource(name=” “)

- @PostConstruct

- @PreDestroy

基礎的配置檔案,要寫配置檔案可以在下面寫,這個檔案是通用的。

@Autowired 注解

-

也可以是一種提供來自ApplicationContext的特殊類型的所有 beans,注解字段或者方法

Maps 也可以這樣注解,隻要這個 Map 的 key 類型為 String。這個 Map 的 values 應該是已知的類型,并且 keys 應該包含符合 bean 的命名

  在預設情況下,當出現0個候選的 beans時自動連接配接将失敗;預設行為把連接配接方法,構造器,字段假設為 required 的依賴。

  雖然當 一個類隻有一個連接配接構造器時它将被标記為 required, 但是還是可以标記多個構造器的。在這種情況下,每一個構造器都有可能被認為是連接配接構造器, Spring 将會把依賴關系能夠滿足的構造器認為是greediest 的構造器。

  因為通過類型的自動連接配接可能會有多個候選,是以經常需要在選擇過程中加以控制。一種方法去完成這個控制就是使用@Qualifier注解。

@Qualifier注解也能夠被指定為構造器的參數或者方法的參數:

添加标簽作為标簽的子元素,然後指定’type’還有’value’以比對您的自定義限定器注解。類型必須比對注解的全名,或者是一個不危險的、友善一點的名字,您也可以使用“短” 類名。

  Spring 也提供了使用 JSR-250 bean 屬性支援的注射方式。

  對于Spring 托管的對象 Spring 可以以這種方式支援映射

  @Resource有一個‘name’屬性,預設時,Spring 将這個值解釋為要注射的 bean 的名字。換句話說,如果遵循by-name的文法

  如果沒有顯式地給出名字,預設的名字将繼承于字段名或者 setter 方法名:如果是字段名,它将簡化或者等價于字段名;如果是 setter 方法名,它将等價于 bean 屬性名。

注解提供的名字将被BeanFactory解析為 bean 名。

  從javaee5規範開始,servlet增加了兩個影響servlet生命周期的注解(annotation):@PostConstruct 與 @PreDestroy。這兩個注解用來修飾一個非靜态的void()方法:而且這個方法不能抛出異常聲明。

  當一個方法帶有這些注解之一時,将被在其生命周期與 Spring 生命周期接口的方法或者顯式聲明回調方法同一刻上調用。

被@POSTconstruct修飾的方法會在伺服器加載servlet的時候運作,并且被伺服器調用一次,類似于Servlet的init()方法。被@POSTconstruct修飾的方法會在構造函數之後,init方法之前調用運作。

被@precontruct修飾的方法會在伺服器解除安裝servlet的時候運作,并且隻會被伺服器調用一次,類似于servlet的destroy()方法。被@precontruct修飾的的方法會在destroy()方法之後運作,在servlet被徹底解除安裝之前。