天天看點

@ComponentScan-自動掃描元件

@ComponentScan

  • 掃描com.spring包下面的所有元件
@ComponentScan(value="com.spring")
           
  • 掃描com.spring下的所有元件,排除@Service注解的元件
@ComponentScan(value = "com.spring",
		excludeFilters = {@ComponentScan.Filter(type = ANNOTATION,classes = {Service.class})}
)
           

type = ANNOTATION

,按注解類型過濾,為預設類型,可以不寫

excludeFilters = Filter[] :指定掃描的時候按照什麼規則排除那些元件

  • 掃描com.spring下的所有元件,隻包含@Controller注解的元件
@ComponentScan(value = "com.spring",
		includeFilters = {@ComponentScan.Filter(type = ANNOTATION,classes = {Controller.class})},
		useDefaultFilters = false
)
           

useDefaultFilters = false 關閉預設掃描包

includeFilters = Filter[] :指定掃描的時候隻需要包含哪些元件

  • 配置多個掃描元件
@ComponentScans({
		@ComponentScan(value = "com.spring",
				includeFilters = {@ComponentScan.Filter(classes = {Controller.class})},
				useDefaultFilters = false
		),
		@ComponentScan(value = "com.spring",
				excludeFilters = {@ComponentScan.Filter(classes = {Service.class})})
})
           

jdk1.8以後可以重複寫@ComponentScans元件:

@ComponentScan(value = "com.spring",
		includeFilters = {@ComponentScan.Filter(classes = {Controller.class})},
		useDefaultFilters = false
)
@ComponentScan(value = "com.spring",
		excludeFilters = {@ComponentScan.Filter(classes = {Service.class})}
)

           
  • 隻掃描@Controller注解和Person 類型
@ComponentScan(value = "com.spring",
		includeFilters = {
			@ComponentScan.Filter(type = ANNOTATION,classes = {Controller.class}),
			@ComponentScan.Filter(type = ASSIGNABLE_TYPE ,classes = {Person.class})
		},
		useDefaultFilters = false
)
           

type = ASSIGNABLE_TYPE

按指定類型過濾