在之前的实例中,一个SpringMVC项目由两个需要加载的配置类SpringConfig
和SpringMvcConfig
,它们分别需要加载不同的内容:
SpringConfig
:加载业务bean(service),功能bean(DataSource,SqlSessionFactoryBean,MapperScannerConfigurer等)。
SpringMvcConfig
:加载其相关bean(表现层bean),也就是controller包下的类。
那么如何让Spring
和SpringMVC
分开加载各自的内容?
方法一:设置更精细的扫描范围,在SpringMVC
的配置类SpringMvcConfig
中将其扫描范围设置到controller
;在Spring
的配置类SpringConfig
中将其扫描范围设置到service
和dao
方法二:修改Spring
配置类,设定扫描范围排除掉controller
包中的bean
@Configuration
@ComponentScan(value="com.itheima",
excludeFilters=@ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Controller.class
)
)
public class SpringConfig {
}
excludeFilters
属性:设置扫描加载bean时,排除的过滤规则type
属性:设置排除规则,当前使用按照bean定义时的注解类型进行排除
ANNOTATION:按照注解排除
ASSIGNABLE_TYPE:按照指定的类型过滤
ASPECTJ:按照Aspectj表达式排除,基本上不会用
REGEX:按照正则表达式排除
CUSTOM:按照自定义规则排除classes
属性:设置排除的具体注解类,当前设置排除@Controller
定义的bean
注意:测试的时候,需要把SpringMvcConfig
配置类上的@ComponentScan
注解注释掉。
因为Spring配置类扫描的包是com.itheima
,SpringMVC的配置类SpringMvcConfig
上有一个@Configuration
注解,也会被Spring扫描到,这样又会扫描到controller