<context:component-scan base-package=" " />
要使用<context:component-scan>標(biāo)簽憔鬼,必須要有xmlns:context
配置<context:component-scan base-package="" />掃描的包及其子包圾另,只有當(dāng)遇到了@Component @Controller@Service這些注解時spring才會注冊對應(yīng)的bean扛点,配置掃描多個包术辐,可以通過“,”逗號隔開:
<context:component-scan?base-package="com.test1,com.test2,com.test3"?/>
另外<context:component-scan>有一個use-default-filters屬性和兩個子標(biāo)簽<context:include-filter>贷揽,<context:exclude-filter>渡处。use-default-filters屬性是使用默認(rèn)過濾器镜悉,默認(rèn)值為true,首先通過exclude-filter 進(jìn)行黑名單過濾医瘫;然后通過include-filter 進(jìn)行白名單過濾侣肄;否則默認(rèn)選中掃描。(true則會對除了黑名單外進(jìn)行掃描管理醇份,false則不使用默認(rèn)過濾器)稼锅。
@Autowired
在Spring 2.5 引入了 @Autowired 注釋,它可以對類成員變量僚纷、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注矩距,完成自動裝配的工作。?省去了set 怖竭,get方法锥债。
當(dāng)spring容器中有bean之后,就能使用@autowired自動注入相對應(yīng)的bean了痊臭,這是因為在啟動spring IoC時哮肚,容器自動裝載了一個AutowiredAnnotationBeanPostProcessor這樣的bean,當(dāng)這個bean掃描到@Autowied广匙、@Resource或@Inject時允趟,就會在IoC容器自動查找需要的bean,并裝配給該注解標(biāo)注的變量或方法及構(gòu)造函數(shù)的參數(shù)鸦致。
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
也就是說潮剪,如果你不配置掃描也不寫@Controller@Service這些注解時涣楷,你必須手動在spring配置文件中配置bean,才能使用@Autowied注入bean鲁纠。
此外在使用@Autowired時总棵,首先在容器中查詢對應(yīng)類型的bean
1.如果查詢結(jié)果剛好為一個,就將該bean裝配給@Autowired指定的變量改含。
2.如果查詢的結(jié)果不止一個情龄,那么@Autowired會根據(jù)指定變量的名稱來查找。也可以使用注解@Qualifier("bean的名稱")來指定查找的bean捍壤。
3.如果查詢的結(jié)果為空骤视,那么會拋出異常。解決方法時鹃觉,使用required=false专酗。
當(dāng)使用@Autowired注解的時候,其實默認(rèn)就是@Autowired(required=true)盗扇,表示注入的時候祷肯,該bean必須存在,否則就會注入失敗疗隶。
@Autowired(required=false):表示忽略當(dāng)前要注入的bean佑笋,如果有直接注入,沒有跳過斑鼻,程序不會報錯蒋纬。