Spring容器所管理的bean
-
业务bean(service)
-
功能bean (DataSource,SqlSessionFactoryBean,MapperScannerConfigurer等)
SpringMVC所管理的bean
-
加载其相关bean(表现层bean),也就是controller包下的控制类
如何避免Spring加载到SpringMVC的bean
-
1.将Spring和SpringMVC的配置类包扫描的路径设定为一个精确的包,如service、dao等
@Configuration @ComponentScan({"com.presentationLayer.controller"}) public class SpringMVCConfig{...} @Configuration @ComponentScan({"com.presentationLayer.dao","com.presentationLayer.service"}) @PropertySource("jdbc.properties") @Import({JdbcConfig.class, MybatisConfig.class}) public class SpringConfig {...}
-
2.在Spring配置类包扫描一个目录下的所有包的同时排除SpringMVC管理的bean所在的包,这里需要满足一个前提条件==》SpringMVCConfig的配置类中不能将扫描controller,否则排除无法生效,这是由于 SpringMvcConfig 上有一个@Configuration注解,也会被Spring扫描到 SpringMvcConfig上又有一个@ComponentScan,把controller类又给扫描进来了
@ComponentScan(value = {"com.presentationLayer"}, excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class))
-
3.excludeFilters属性:设置扫描加载bean时,排除的过滤规则
-
type属性:设置排除规则,当前使用按照bean定义时的注解类型进行排除
-
ANNOTATION:按照注解排除
-
ASSIGNABLE_TYPE:按照指定的类型过滤
-
ASPECTJ:按照Aspectj表达式排除,基本上不会用
-
REGEX:按照正则表达式排除
-
CUSTOM:按照自定义规则排除
-
-
classes属性:设置排除的具体注解类,当前设置排除@Controller定义的bean
-