业务bean加载控制
方式一:扫描范围比较大,再排除掉其中的bean
方式二:加载的bean设定扫描范围为精准范围
//过滤掉com.rikka包下带有Controller注解的bean
@ComponentScan( value = "com.rikka",
excludeFileters = @ComponentScan.Filter(
type = FilterType.ANNOTATION, //指定屏蔽类别
classes = Controller.class //具体屏蔽对象
)
)
excludeFilters:排除扫描路径中加载的bean,需要指定类别和具体项
includeFilters:加载指定的bean,需要指定类别和具体项
创建一个main方法,测试是否成功过滤
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
System.out.println(ctx.getBean(UserController.class));
}
注意,这里要将SpringMvcConfig中的@Configuration注解注释掉,否则被过滤的bean在这里会被重新加载。
运行后,报错:No qualifying bean of type 'com.rikka.controller.UserController' available。成功过滤。
去掉过滤语句,或者不注释掉SpringMvcConfig中的@Configuration注解,则会正常显示
P.S:
如果操作正常的情况下,过滤不成功,也许不是代码的原因,我只是把项目关闭,第二天重启了下电脑就可以成功过滤。
SpringConfig配置后,在ServletConfig中添加SpringConfig环境,操作基本和添加SpringMvcConfig环境一致,只是改了个名
public class ServletConfig extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);
return ctx;
}
}
简化上述添加环境的代码,换为继承AbstractAnnotationConfigDispatcherServletInitializer类,功能一切正常
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}