Bean加载控制

简介: Bean加载控制

在这里插入图片描述

🍁博客主页:👉 不会压弯的小飞侠
✨欢迎关注:👉点赞👍收藏⭐留言✒
✨系列专栏:👉 SpringMVC注解开发
✨如果觉得博主的文章还不错的话,请三连支持一下博主。
🔥欢迎大佬指正,一起 学习!一起加油!

在这里插入图片描述

@TOC


一、SpringMVc简介

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

  • SpringMVc相关bean(表现层bean)
  • Spring控制的bean

    • 业务bean (Service)
    • 功能bean (DataSource等)
    • SpringMVC相关bean加载控制

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

        • 方式一: Spring加载的bean设定扫描范围为com.study,排除掉controller包内的bean
        • 方式二: Spring加载的 bean设定扫描范围为精准范围,例如service包、dao包等
        • 方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中
  • @ComponentScan

    • 类型:类注解
@Configuration
//@ComponentScan({com.study.service},{com.study.dao})
@ComponentScan(value = "com.study" ,
     excludeFilters =@Componentscan.Filter(
          type = FilterType.ANNOTATION,
         classes = Controller.class
         )
   )
public class SpringConfig {
}
  • 属性
  • excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)
  • includeFilters:加载指定的bean,需要指定类别(type)与具体项(classes)
  • Bean的加载格式
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载SpringMVC容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
    //设置哪些请求可以归属SpringMVC处理
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //加载Spring容器配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringConfig.class);
        return ctx;
    }
}
  • 简化版
public class ServletContainersInitConfig 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[]{"/"};
    }
}

二、案例

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>SpringMVC-Demo1</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

 <dependencies>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
     <version>5.2.22.RELEASE</version>
   </dependency>
   <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>4.0.1</version>
     <scope>provided</scope>
   </dependency>
 </dependencies>
</project>

2.ServletContainersInitConfig

package com.study.config;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

public class ServletContainersInitConfig 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[]{"/"};
    }
}
/*
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载SpringMVC容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
    //设置哪些请求可以归属SpringMVC处理
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //加载Spring容器配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringConfig.class);
        return ctx;
    }
}*/

3.SpringConfig

package com.study.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.study")
public class SpringConfig {
}

4.SpringMvcConfig

package com.study.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.study.controller")
public class SpringMvcConfig {
}

5.UserController

package com.study.controller;

import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller //定义Bean
public class UserController {
    @RequestMapping("/save")
    @ResponseBody  //设置当前操作的返回值类型
    public String save(){
        System.out.println("user save....");
        return "{'module':'SpringMVC'}";
    }

}

6.Test

package com.study;

import com.study.config.SpringConfig;
import com.study.controller.UserController;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(SpringConfig.class);
        System.out.println(app.getBean(UserController.class));

    }
}
相关文章
|
JavaScript 前端开发 Shell
用shell脚本写一个坦克大战的游戏的思路
用shell脚本写一个坦克大战的游戏思路
469 1
|
开发者 程序员
基于阿里云快速搭建数字营销引擎【计算广告】
阿里云营销引擎有别于其他阿里云产品,它是配合阿里云MaxComputer,画像分析,分析型数据库等多个云产品,并在高德DMP和友盟+DMP提供人群分析能力的基础上,提供一整套数字营销解决方案。 在过去搭建一套成熟DSP平台需要一个强大的技术和业务团队,现在只需要一个人就能够轻松完成,大幅降低了系统构建的基础设施成本,运维成本,容灾成本,开发成本,时间成本。
3359 0
|
11月前
|
人工智能 自然语言处理 API
适用于 .NET 稳定的官方OpenAI库
适用于 .NET 稳定的官方OpenAI库
238 0
|
11月前
|
机器学习/深度学习 数据采集 数据挖掘
Python在数据科学中的应用:从数据处理到模型训练
Python在数据科学中的应用:从数据处理到模型训练
|
12月前
|
机器学习/深度学习 算法 固态存储
深度学习在图像识别中的应用与发展
本文将探讨深度学习在图像识别领域的应用与发展。通过分析深度学习的基本概念、常用模型以及具体案例,揭示其在图像识别中的重要性和未来趋势。我们将详细介绍卷积神经网络(CNN)的原理与结构,并展示如何利用深度学习进行图像分类、目标检测和图像分割等任务。同时,我们还将讨论当前面临的挑战及可能的解决途径。希望通过这篇文章,读者能够对深度学习在图像识别中的应用有一个全面而深入的了解。
|
存储 弹性计算 Dragonfly
阿里云服务器收费标准及新购1年、2年、3年、4年、5年优惠价格整理与分享
2023年5月7日,阿里云产品大规模调价的正式生效,调价之后c8y/g8y/r8y系列云服务器和g7/c7/r7系列云服务器价格下降了15-20%,gn6i/gn6v系列gpu云服务器更是下降了41-47%。目前轻量应用服务器及u1和g7/c7/r7系列云服务器可优惠选购1年,c8y/g8y/r8y系列云服务器可优惠选购1年到5年,本文为大家整理与分享阿里云服务器收费标准及新购1年、2年、3年、4年、5年优惠价格。
1948 0
阿里云服务器收费标准及新购1年、2年、3年、4年、5年优惠价格整理与分享
|
消息中间件 人工智能 Cloud Native
开放下载 | 飞天技术峰会-云原生加速应用构建分论坛资料开放下载
阿里云飞天技术峰会于 8 月 11 日在深圳举行,峰会以“聚焦核心技术,激活企业内生动力”为主题,邀请众多高新技术领军企业,围绕“企业如何在新一代云计算体系架构之上激活业务、技术、产品的内生动力”这一核心话题展开探讨,共商后疫情时代企业增长的破局之道。
开放下载 | 飞天技术峰会-云原生加速应用构建分论坛资料开放下载
|
存储 算法 关系型数据库
一文剖析PolarDB HTAP的列存数据压缩
PolarDB MySQL是阿里云自研的OLTP云原生数据库,为满足客户HTAP的需求,PolarDB技术团队提出了基于In-Memory Column Index的技术方案,本文介绍数据的压缩方法以及PolarDB HTAP在列存数据压缩上的工作。通过压缩,PolarDB HTAP在大部分业务场景将列存存储空间减少到十分之一,大幅减少客户的存储成本。在计算性能上,PolarDB技术团队探究将计算下推到压缩数据从而加速分析,进一步为客户提供更好的OLAP查询性能,实现HTAP系统性能和成本的兼得。
566 0
|
云安全 监控 安全
干货帖 | 阿里云云安全ACP认证考试攻略来袭…
号外!号外!云安全专业认证考试的经验分享来啦,除了烧高香,拜大佛,尊考神,我们还要做些什么实实在在的准备呢?我们来看一看~
7928 0
|
Java Maven 开发工具
【教你玩转云计算】在阿里云建立自己免费的私有Maven库
开发微服务项目,最常用的就是使用Maven进行依赖和包下载,默认情况下,开发工具如Eclipse都是会从开源Maven库里面去获取包,但是由于服务器都在国外,下载速度非常慢,导致使用体验较差。所以我们一般会修改Maven的中央库地址为国内的镜像库,如阿里云的,网易的都是比较不错的。
4520 0