温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring bean加载控制如何实现

发布时间:2022-12-28 09:41:32 来源:亿速云 阅读:102 作者:iii 栏目:开发技术

这篇文章主要讲解了“Spring bean加载控制如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring bean加载控制如何实现”吧!

    1. Controller加载控制

    因为功能不同,要避免Spring错误的加载到SpringMVC的bean

    1.1 Controller加载控制与业务bean加载控制

    Spring bean加载控制如何实现

    SpringMVC相关bean(表现层bean)

    Spring控制的bean

    • 业务bean(Service)

    • 功能bean(DataSource等)

    SpringMVC相关bean加载控制

    • SpringMVC加载的bean对应的包均在com.zhang.controller包内

    Spring相关bean加载控制

    • 方式一:Spring加载的bean设定扫描范围为com.zhang,排除掉controller包内的bean

    • 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等

    • 方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中

    1.2 加载Spring控制的bean的时候排除掉SpringMVC控制的bean(方式一)

    名称:@ComponentScan

    类型:类注解

    范例

    package com.zhang.config;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.FilterType;
    import org.springframework.stereotype.Controller;
    @Configuration
    @ComponentScan(value = "com.zhang", excludeFilters = @ComponentScan.Filter(
            type = FilterType.ANNOTATION,
            classes = Controller.class
    ))
    public class SpringConfig {
    }

    属性

    • excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)

    • includeFilters:加载指定的bean,需要指定类别(type)与具体项(classes)

    1.3 验证是否排除成功

    创建spring容器加载spring配置文件,然后根据类型获取表现层的bean,如果不能获取则证明加载Spring控制的bean的时候成功排除掉SpringMVC控制的bean;这里值得一提的是,需要把SpringMVCConfig配置类上的@Configuration注释掉;

    package com.zhang;
    import com.zhang.config.SpringConfig;
    import com.zhang.controller.UserController;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    public class App {
        public static void main(String[] args) {
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
            UserController userController = context.getBean(UserController.class);
            System.out.println(userController);
        }
    }

    1.4 运行结果

    Spring bean加载控制如何实现

    证明加载Spring控制的bean的时候成功排除掉SpringMVC控制的bean

    2. Bean的加载格式

    extends AbstractDispatcherServletInitializer

    public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer { 
        protected WebApplicationContext createServletApplicationContext() { 
            AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
            ctx.register(SpringMvcConfig.class);
            return ctx;  
        }   
        protected WebApplicationContext createRootApplicationContext() {  
            AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();      
            ctx.register(SpringConfig.class);        
            return ctx;  
        }   
        protected String[] getServletMappings() { 
            return new String[]{"/"}; 
        }
    }

    简化格式

    extends AbstractAnnotationConfigDispatcherServletInitializer

    public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
        protected Class<?>[] getServletConfigClasses() {
            return new Class[]{SpringMvcConfig.class}
        };
        protected String[] getServletMappings() {
            return new String[]{"/"};
        }
        protected Class<?>[] getRootConfigClasses() {
            return new Class[]{SpringConfig.class};
        }
    }

    感谢各位的阅读,以上就是“Spring bean加载控制如何实现”的内容了,经过本文的学习后,相信大家对Spring bean加载控制如何实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI