使用Spring annotation編程的快感

1、前言

Spring的Bean Factory所實現的IoC輕量級容器,能夠很方便地讓你們基於POJO開發JavaEE應用程序。java

建立應用對象之間協做關係的行爲一般稱爲裝配正則表達式

Spring中有三種裝配Bean的方法spring

  • 在XML中顯式配置
  • 在Java中顯式配置
  • 隱式的bean發現機制和自動裝配

這兒要說的就是第三個「自動發現與裝配」,它會帶來編程的快感。express

2、隱式的bean發現機制和自動裝配

隱式配置分紅兩步 一、組件掃描 二、自動裝配編程

一、組件掃描

組件掃描能夠經過XML配置實現框架

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:context="http://www.springframework.org/schema/context"; xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd";> 

    <context:component-scan base-package="xyz.mrwood.study.spring.example" /> 
</beans>

二、自動裝配

spring自動知足bean之間的依賴,經過Autowired來進行依賴的注入spa

@Component 
public class Waiter { 
    public void service(String name){ 
        System.out.println("service to " + name); 
    } 
}

@Component 
public class Store { 
    @Autowired 
    private Waiter waiter; 

    public void service(){ 
        waiter.service("kiwi"); 
    } 
}

spring中全部bean都會有一個ID,咱們經過@Component設置的,自動掃描時會以類名首字母小寫爲ID。若是想要自定義就要設置@Component的參數。.net

@ComponentScan默認是掃描當前包以及子包。若是想設置其它包或者多個包,能夠經過設置該註解的basePackages。可是這種是以字符串形式不利於重構。能夠使用另一個屬性backPackageClasses指定某個類(開發中經常使用標記接口),而後spring會掃描這個類下面的包與子包。code

能夠使用java規範的@Named替換@Component,也能夠使用java規範的@Inject去替換@Autowiredcomponent

3、何來快感

工做最經常使用的是隱式配置,由於自動掃描很是方便,可是有些狀況下只能使用顯式的手動配置。好比引入一些第三方庫,要想讓spring管理這個bean。不可能修改它的源碼。只能經過顯式配置。

一、@Component @Repository @Service @Controller

默認的,以@Component @Repository @Service @Controller或者被@Component註解的自定義註解所註解的類,是惟一的自動發現候選組件。
開啓組件掃描後,你想要自動裝配兩個對象的話,就無需配置XML了,只要在被引用的對象的類上加上註解:@Component或其它幾個,而後在引用方類中,定義被引用對象的私有變量上加上註解:@Autowired,就搞定了(參考「自動裝配」小節的例子)。是否是很爽。

二、拋棄@Component @Repository @Service @Controller

你甚至能夠拋棄這幾個自動發現候選組件。這樣的話,只須要利用@Autowired註解,就能夠裝配相關的對象了。想象一下,你定義了許多服務類,而後你想要引用它們時,只需定義一個服務類屬性,而後加上@Autowired註解,Spring框架就自動爲你裝配好了,是否是很爽。

不過想要拋棄這幾個自動發現候選組件,你得作一點兒額外得工做,那就是配置一下filter。

<beans>
    <context:component-scan base-package="org.example">
        <context:include-filter type="regex"  expression=".*Stub.*Repository"/>
    </context:component-scan>
</beans>

看到沒,只須要在component-scan元素中,加入include-filter子元素便可。base-package設定爲你的服務類所在的namespace,type設定爲regex,expression設定爲你的服務類類名所知足的正則表達式。

OK搞定了。接下來你就能夠只使用@Autowired註解來裝配任何一個你想要的服務類了。

參考文檔:http://blog.csdn.net/u0117192...參考文檔:Spring Framework Reference Document

相關文章
相關標籤/搜索