从零开始的SpringMVC生活(二)

本文介绍了如何在Spring框架中通过`@ComponentScan`和`excludeFilters`/`includeFilters`控制Bean的加载,以及在不同配置类中的应用,如`SpringConfig`和`ServletConfig`,展示了如何精确扫描和排除特定类型的Bean。
摘要由CSDN通过智能技术生成

业务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[]{"/"};
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值