2:bean的加载及控制
目的:为了防止SpringMVC所管控的bean被Spring加载
2.1:设置过滤规则
@Configuration //@ComponentScan({"com.itheima.service","com.itheima.dao"}) //设置spring配置类加载bean时的过滤规则,当前要求排除掉表现层对应的bean //excludeFilters属性:设置扫描加载bean时,排除的过滤规则 //type属性:设置排除规则,当前使用按照bean定义时的注解类型进行排除 //classes属性:设置排除的具体注解类,当前设置排除@Controller定义的bean @ComponentScan(value="com.itheima", excludeFilters = @ComponentScan.Filter( type = FilterType.ANNOTATION, classes = Controller.class ) ) public class SpringConfig { }
2.2:小注意点
当Spring配置类配置相应的过滤规则后,SpringMVC配置类要有以下注意点:
- Spring中把它所需要扫描的包路径全给加好
- 第二种:
@Configuration //如果加了bean声明,那么把包扫描去掉,否则Spring过滤后,SpringMVC会再次加载 //@ComponentScan("com.itheima.controller") public class SpringMvcConfig { }
2.3:web配置类简化开发
原始的是继承AbstractDispatcherServletInitializer
接口,并实现三个方法。
现在简化开发继承了AbstractAnnotationConfigDispatcherServletInitializer
接口,反射原理。
例:
//web配置类简化开发,仅设置配置类类名即可 public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer { protected Class<?>[] getRootConfigClasses() { return new Class[]{SpringConfig.class}; } protected Class<?>[] getServletConfigClasses() { return new Class[]{SpringMvcConfig.class}; } protected String[] getServletMappings() { return new String[]{"/"}; } }
2.4:测试
现在测试要创建AnnotationConfigApplicationContext
对象
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);