通過類掃描路徑的方式來隱式檢測候選組件,候選組件是匹配過濾條件的類庫,并有在容器中注冊(cè)對(duì)應(yīng)bean的定義。開發(fā)者可以使用注解、AspectJ風(fēng)格的表達(dá)式、自定義的過濾條件來選擇哪些類有在容器中注冊(cè)bean。
1、@Component及其同義的注解
spring2.5引入了更多典型注解,如@Component、@Repository、@Service、@Controller等。@Component注解是對(duì)受spring過濾組件的通用注解。@Repository、@Service、@Controller注解分別對(duì)應(yīng)持久層、服務(wù)層和表現(xiàn)層。可以使用@Component注解自己的組件類,若使用@Repository、@Service、@Controller來替代,則這些類更適合由工具來處理或與切面進(jìn)行關(guān)聯(lián)。
2、元注解
元注解就是能被應(yīng)用到另一個(gè)注解上的注解。

元注解可以被用于創(chuàng)建組合注解,如springMVC中的@RestController就是@Controller和@ResponseBody。組合注解可能從元注解中任意重新聲明屬性來允許用戶自定義。如下是一個(gè)自定義的@Scope注解,將作用域名稱指定到@Session注解上,也允許自定義proxyMode。



3、自動(dòng)檢測類并注冊(cè)bean定義
spring可以自動(dòng)檢測類并在ApplicationContext中注冊(cè)對(duì)應(yīng)的BeanDefinition。示例如下:


要自動(dòng)檢測這些類并注冊(cè)對(duì)應(yīng)的bean,需要添加@ComponentScan到@Configuration類上,其中的base-package元素是這兩個(gè)類的公共父類包,可以任意選擇使用逗號(hào)、分號(hào)、空格分隔的列表將每個(gè)類引入父包。示例如下:

或者使用XML配置:

<context:component-scan>隱式的開啟了<context:annotation-config>功能,因此無需再使用<context:annotation-config>。
4、使用過濾器來自定義掃描
默認(rèn)情況下@Component、@Repository、@Service、@Controller注解,或使用進(jìn)行自定義的@Component注解的類本身僅用于檢測候選組件,開發(fā)者可以修改并擴(kuò)展這種行為,只需應(yīng)用自定義的過濾器,即在@ComponentScan注解中添加include-filter或exclude-filter參數(shù)即可。每個(gè)過濾器元素需要type和expression屬性。



JSR-330規(guī)范注解
JSR-330是Java依賴注入的標(biāo)準(zhǔn)規(guī)范,從spring3.0開始支持。
@Inject
@javax.inject.Inject可以代替@Autowired注解,和@Autowired一樣,它可以在字段、方法或構(gòu)造器參數(shù)級(jí)別使用,示例如下:
import javax.inject.Inject;
public class TestBean {
????private MessageServiceservice;
? ? @Inject
????public void setService(MessageService service) {this.service = service;}
}
@Named和@ManagedBean
@javax.inject.Named和javax.annotation.ManagedBean可以代替@Component。示例如下:
import javax.inject.Named;
import javax.inject.Inject;
@Named("testBean") //等同于@ManagedBean("testBean")
public class?TestBean {
? ??private MessageServiceservice;
? ??@Inject
????public void setService(MessageService service) {this.service = service;}
}
當(dāng)使用@javax.inject.Named和javax.annotation.ManagedBean注解時(shí),可以與使用spring注解相同的方式使用組件掃描。
@Configuration
@ComponentScan(basePackages ="com.xlws")
public class AppConfig {}
--參考文獻(xiàn)《Srping5開發(fā)大全》