Spring組件掃描詳解

最近使用Spring,發現有不少依賴注入的內容,特別是DAO,百思不得其解,後來才知道是Spring的依賴注入。Spring能夠批量將一個目錄下全部的植入@Repository 註解或者@Service 註解的組件類一次性掃描出來。 spring

事例

複製代碼
<?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/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:annotation-config /> <context:component-scan base-package=」com.eric.spring」> </beans>
複製代碼

簡單解釋一下: 工具

一、annotation-config是對標記了 Spring's @Required、@Autowired、JSR250's @PostConstruct、@PreDestroy、@Resource、JAX-WS's @WebServiceRef、EJB3's @EJB、JPA's @PersistenceContext、@PersistenceUnit等註解的類進行對應的操做使註解生效。 ui

二、base-package爲須要掃描的包(含全部子包),負責掃描那些類有註解。 spa

官方解釋

下面是引用spring framework開發手冊中的一段話: .net

複製代碼
Spring 2.5引入了更多典型化註解(stereotype annotations):@Component、@Service和@Controller。
@Component: 全部受Spring管理組件的通用形式;而@Repository、@Service和 @Controller則是@Component的細化,用來表示更具體的用例(例如,分別對應了持久化層、服務層和表現層)。也就是說,你能用@Component來註解你的組件類,但若是用@Repository、@Service 或@Controller來註解它們,你的類也許能更好地被工具處理,或與切面進行關聯。例如,這些典型化註解能夠成爲理想的切入點目標。固然,在Spring Framework之後的版本中, @Repository、@Service和 @Controller也許還能攜帶更多語義。如此一來,若是你正在考慮服務層中是該用@Component仍是@Service,那@Service顯然是更好的選擇。一樣的,就像前面說的那樣, @Repository已經能在持久化層中進行異常轉換時被做爲標記使用了。
複製代碼

接下來詳細說明一下@Component、@Service、@Repository和@Controller的區別 code

@Component 泛指組件,當組件很差歸類的時候,咱們能夠使用這個註解進行標註。 component

@Service 用於標註業務層組件 xml

@Controller 用於標註控制層組件(如struts中的action) 開發

@Repository 用於標註數據訪問組件,即DAO組件 get

引用組件

在須要組件的地方,使用以下代碼便可引用

@Resource private ElevenDao elevenDao; //ElevenDao類是須要引用的組件
相關文章
相關標籤/搜索