Spring bean加载控制实现方法

 更新时间:2022年12月23日 10:44:34   作者:给我手牵你走~~  
很多时候我们需要根据不同的条件在容器中加载不同的Bean,或者根据不同的条件来选择是否在容器中加载某个Bean,这就是Bean的加载控制,一般我们可以通过编程式或注解式两种不同的方式来完成Bean的加载控制

1. Controller加载控制

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

1.1 Controller加载控制与业务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的时候成功排除掉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加载控制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 基于SpringBoot实现代码在线运行工具

    基于SpringBoot实现代码在线运行工具

    这篇文章主要介绍了如何利用SpringBoot实现简单的代码在线运行工具(类似于菜鸟工具),文中的示例代码讲解详细,需要的可以参考一下
    2022-06-06
  • Java中字符序列的替换与分解的几种实现方法

    Java中字符序列的替换与分解的几种实现方法

    本文主要介绍了Java中字符序列的替换与分解的几种实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java中对象快速复制的几种方式详解

    Java中对象快速复制的几种方式详解

    这篇文章主要介绍了Java中对象快速复制的几种方式详解,对象的克隆是指创建一个新的对象,且新的对象的状态与原始对象的状态相同,当对克隆的新对象进行修改时,不会影响原始对象的状态,需要的朋友可以参考下
    2023-08-08
  • 初次使用IDEA创建maven项目的教程

    初次使用IDEA创建maven项目的教程

    这篇文章主要介绍了初次使用IDEA创建maven项目的教程讲解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01
  • java编码IDEA主题推荐

    java编码IDEA主题推荐

    在这篇文章中,我精选了几个比较是和 Java 编码的 IDEA 主题供小伙伴们选择。另外,我自己用的是 One Dark theme 这款,有需要的朋友可以借鉴参考下,希望大家喜欢
    2022-01-01
  • Java中Double除保留后小数位的几种方法(小结)

    Java中Double除保留后小数位的几种方法(小结)

    这篇文章主要介绍了Java中Double保留后小数位的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Spring Batch批处理框架使用解析

    Spring Batch批处理框架使用解析

    这篇文章主要介绍了Spring Batch批处理框架使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java经典排序算法之冒泡排序代码实例

    Java经典排序算法之冒泡排序代码实例

    这篇文章主要介绍了Java经典排序算法之冒泡排序代码实例,相邻两元素进行比较,如过左侧元素大于右侧元素,则进行交换,每完成一次循环就将最大元素排在最后,下一次循环是将其它的数进行类似操作,需要的朋友可以参考下
    2023-11-11
  • 浅谈Zookeeper开源客户端框架Curator

    浅谈Zookeeper开源客户端框架Curator

    这篇文章主要介绍了浅谈Zookeeper开源客户端框架Curator的相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • 关于ScheduledThreadPoolExecutor不执行的原因分析

    关于ScheduledThreadPoolExecutor不执行的原因分析

    这篇文章主要介绍了关于ScheduledThreadPoolExecutor不执行的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论