Spring的Bean Factory所實現的IoC輕量級容器,能夠很方便地讓你們基於POJO開發JavaEE應用程序。java
建立應用對象之間協做關係的行爲一般稱爲裝配正則表達式
Spring中有三種裝配Bean的方法spring
這兒要說的就是第三個「自動發現與裝配」,它會帶來編程的快感。express
隱式配置分紅兩步 一、組件掃描 二、自動裝配編程
組件掃描能夠經過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
工做最經常使用的是隱式配置,由於自動掃描很是方便,可是有些狀況下只能使用顯式的手動配置。好比引入一些第三方庫,要想讓spring管理這個bean。不可能修改它的源碼。只能經過顯式配置。
默認的,以@Component @Repository @Service @Controller或者被@Component註解的自定義註解所註解的類,是惟一的自動發現候選組件。
開啓組件掃描後,你想要自動裝配兩個對象的話,就無需配置XML了,只要在被引用的對象的類上加上註解:@Component或其它幾個,而後在引用方類中,定義被引用對象的私有變量上加上註解:@Autowired,就搞定了(參考「自動裝配」小節的例子)。是否是很爽。
你甚至能夠拋棄這幾個自動發現候選組件。這樣的話,只須要利用@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