2. bean加载控制

news2025/7/13 6:42:23

1. Controller加载控制

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

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

image-20221222203742740
  • SpringMVC相关bean(表现层bean)

  • Spring控制的bean

    1. 业务bean(Service)

    2. 功能bean(DataSource等)

  • SpringMVC相关bean加载控制

    1. SpringMVC加载的bean对应的包均在com.zhang.controller包内
  • Spring相关bean加载控制

    1. 方式一:Spring加载的bean设定扫描范围为com.zhang,排除掉controller包内的bean
    2. 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
    3. 方式三:不区分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 {
}

属性

  1. excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)
  2. 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 运行结果

image-20221222205731679

证明加载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};
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java——图

概念 图是由顶点和边组成的一种数据结构&#xff0c;我们之前介绍的树形结构中&#xff0c;树的每一个节点就是顶点&#xff0c;顶点与顶点中的连线就是边&#xff0c;也就是说&#xff0c;树是一种特殊的图 图中的边如果有方向&#xff0c;那么这个图就称为有向图&#xff0…

个人总结详细版的C++调用Opencv和Halcon封装dll

一、前言&#xff1a; 在C调用opencv和Halcon封装的过程中踩过很多坑&#xff0c;然而网上却查不到清晰地教程。在此个人总结详细教程&#xff0c;以免后人踩坑。记录下&#xff0c;以后自己忘了也可以来看看。 二、教程细节 2.1 我使用的IDE是vs2017,下面所有的介绍也都是以此…

理解操作系统(Linux)

操作系统是一款对软硬件资源进行管理的软件&#xff01; 操作系统为什么要对软硬件资源进行管理呢&#xff1f; 操作系统通过合理的管理软硬件资源的手段&#xff0c;为用户提供良好的&#xff08;稳定的、高效的、安全的&#xff09;执行环境。 操作系统是如何进行管理的呢…

机器学习100天(十七):017 逻辑回归梯度下降

机器学习 100 天,今天讲的是:逻辑回归-梯度下降! 在讲解了逻辑回归的基本原理和损失函数之后,我们来推导逻辑回归模型中参数 w 和 b 的梯度表达式。 我们之前介绍过,计算逻辑回归的代价函数实际上包含了下面三个过程: Z = W T X + b Z=W^TX+b Z=

ASOC系统简析

一 嵌入式音频系统介绍 上图是音频系统的硬件模拟图&#xff0c;声卡通过I2S接口与cpu进行音频数据传输&#xff0c;通过I2C接口与cpu进行控制通讯。 录音数据通路&#xff1a;麦克风---->声卡------I2S------>DMA---->内存&#xff1b; 播放数据通路&#xff1a;内存…

HaaS EDU物联网项目实战:野外救援项目

HaaS EDU K1是一款高颜值、高性能、高集成度的物联网开发板&#xff0c;板载功能强大的4核&#xff08;双核300Mhz M33双核1GHz A7&#xff09;主芯片&#xff0c;2.4G/5G双频Wi-Fi&#xff0c;双模蓝牙&#xff08;经典蓝牙/BLE&#xff09;&#xff0c;并自带丰富的传感器与小…

Exception in thread “main“ java.lang.NoClassDefFoundError

项目场景&#xff1a; 验证继承情况下子类创建对象时&#xff0c;先调用父类的构造方法&#xff0c;再调用子类的构造方法 问题描述 随机&#xff08;不同次数的测试下&#xff09;会产生Exception in thread "main" java.lang.NoClassDefFoundError错误 package e…

Pandas 详解

本文主要介绍python 数据分析模块 Pandas&#xff0c;并试图对其进行一个详尽的介绍。 通过阅读本文&#xff0c;你可以&#xff1a; 掌握 Anaconda 环境的安装及使用了解什么是 Pandas掌握 Series 对象基本操作掌握 DataFrame 对象的基本操作掌握缺值处理掌握 Series 对象和 D…

计算机今年炸了?现在还适合入行吗?

恍惚之间&#xff0c;一年已来到了尾声&#xff0c;对于应届生来说&#xff0c;这是不堪回首的一年&#xff0c;一个字&#xff0c;难。 不但冷门专业就业困难&#xff0c;就连过去的宇宙机专业&#xff0c;也不复盛况&#xff0c;相较于往年的火热&#xff0c;今年的计算机行…

ES6的相关知识点

一&#xff1a;var let const let var区别&#xff1a; 1.let没有变量提升&#xff08;预解析&#xff09;我们先定义再使用&#xff0c;Var可以先使用再定义因为他有预解析,var有声明提升>先上车后买票&#xff0c; 2.let不能在同一个作用域中重复定义变量&#xff0c;如…

使用docker容器部署httpd(绝对可用)

众所周知&#xff0c;httpd是一个服务&#xff0c;里面有很多配置要改&#xff0c;通过dockerfile编写很复杂&#xff0c;所以这里&#xff0c;我们【采用进入容器内修改的方式&#xff0c;去生成一个新的httpd容器】 httpd我们平常用yum安装&#xff0c;所以一定要最好是自带…

【小程序】全局配置window和tabBar

目录 全局配置 1. 全局配置文件及常用的配置项 全局配置 - window 1. 小程序窗口的组成部分 2. 了解 window 节点常用的配置项 ​编辑 3. 设置导航栏的标题 4. 设置导航栏的背景色 5. 设置导航栏的标题颜色 6. 全局开启下拉刷新功能 7. 设置下拉刷新时窗口的背景色 …

Hibernate-Validator(数据校验框架)

目录一、Hibernate-Validator 简介二、项目中为什么要用校验框架三、添加依赖四、看一个入门级案例五、常用注解六、使用groups的校验一、Hibernate-Validator 简介 hibernate-validator是Hibernate项目中的一个数据校验框架&#xff0c;它能够将数据校验从业务代码中脱离出来…

-防火墙-

数据来源 一、防火墙的基本概念 防火墙的定义&#xff1a;是一款具备安全防护功能网络设备 ◆ 隔离网络 将需要保护的网络与不可信任网络进行隔离&#xff0c;隐藏信息并进行安全防护 防火墙基本功能&#xff1a; ◆ 访问控制 - ACL ◆ 攻击防护 ◆ 冗余设计 ◆ 路由、交…

基于XMC4800 Ethercat从站的工厂自动化解决方案

背景 随着“工业4.0”与“工业互联网”概念的提出&#xff0c;“互联网制造”的概念被大众所熟知&#xff0c;人们称之为第四次工业革命。在这样的背景下&#xff0c;新的工业自动化孕育而生。智能工厂、提供智能工厂设计与实施的工业4.0解决方案商、技术供应商相继出现。ARRO…

Android---Banner轮播图

轮播图是一种很常见的UI。Banner框架能够帮助我们快速开发&#xff0c;完成首页轮播图效果的需求。 1、导入Banner依赖 implementation io.github.youth5201314:banner:2.2.2 2、activity_main.xml布局。 banner_loop_time: 设置轮播间隔时间&#xff0c;默认3000&#xff…

逆天了!用Numpy开发深度学习框架,透视神经网络训练过程

哈喽&#xff0c;大家好。 今天给大家分享一个非常牛逼的开源项目&#xff0c;用Numpy开发了一个深度学习框架&#xff0c;语法与 Pytorch 基本一致。 今天以一个简单的卷积神经网络为例&#xff0c;分析神经网络训练过程中&#xff0c;涉及的前向传播、反向传播、参数优化等核…

制作圣诞帽其实特简单(附 Python 代码)

圣诞将至&#xff0c;虽然咱不过这洋节&#xff0c;但是热闹还是要凑一下的&#xff0c;相信已经有很多圣诞帽相关的周边在流传了&#xff0c;今天咱们就自己动手&#xff0c;给头像增加一个圣诞帽。 文章目录基础知识准备数字图像图像通道ROI和mask矩阵&#xff08;Numpy&…

BaseAdapter实现的投票案例

BaseAdapter实现的投票案例 1.知识补充 android:descendantFocusability"blocksDescendants"&#xff0c;关键是让谁先去获取焦点beforeDescendants&#xff1a;viewgroup会优先其子类控件而获取到焦点afterDescendants&#xff1a;viewgroup只有当其子类控件不需要获…

Flink Process Function

处理函数: ProcessFunction: 含有状态流的特性 处理函数面对的是数据流中的最基本元素: 数据事件 event, 状态 state, 时间 time 文章目录1.基本处理函数 ProcessFunction1.1 处理函数的功能和使用1.2 ProcessFunction 解析2.处理函数的分类2.1 按键分区处理函数 KeyedProces…