SpringMVC bean加载控制 -- SpringMVC入门保姆级教程(二)

这篇具有很好参考价值的文章主要介绍了SpringMVC bean加载控制 -- SpringMVC入门保姆级教程(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。

前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

二、SpringMVC bean 加载控制

1.bean加载控制

SpringMVC和Spring都只加载对应的bean,因为他们的功能不同,所以要避免Spring加载到SpringMVC的bean

  1. Controller加载控制与业务bean加载控制
  • SpringMVC控制bean

SpringMVC加载的bean为表现层bean,对应的包均在org.example.controller包内

  • Spring控制的bean

Spring加载的bean为业务bean(Service)和功能bean(DataSource等)

  • Spring 避免加载到 SpringMVC 控制的 bean 的方式

方式一: Spring加载的bean设定扫描范围为org.example,排除掉controller包内的bean
方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
方式三:不区分Spring和SpringMVC的环境,都加载到同一环境中

2.添加Spring开发环境

(在SpringMVC入门案例的基础上编码,详情见个人主页资源的SpringMVC源码)

  • 在pom.xml导入Spring开发相关的坐标
    //导入spring框架
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    
    //spring操作数据库
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

    //spring整合mybatis
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

    //导入mybatis
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>

    //mybatis连接数据库
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>
    
  • 创建数据层dao接口userDao
public interface UserDao {
    @Insert("insert into tbl_user(name,age)values(#{name},#{age})")
    public void save(User user);
}

  • 创建数据层dao实体类User
public class User {
    private Integer id;
    private String name;
    private Integer age;
}

  • 创建service服务接口UserService
public interface UserService {
    public void save(User user);
}

  • 创建servide服务接口实现类UserServiceImpl
@Service
public class UserServiceImpl implements UserService {
    public void save(User user) {
        System.out.println("user service ...");
    }
}

3.SpringMVC bean加载控制

  • 创建Spring全局配置类SpringConfig
  1. 方式一: Spring加载的bean设定扫描范围为org.example,排除掉controller包内的bean
@Configuration
@ComponentScan(value="org.example",
        excludeFilters = @ComponentScan.Filter(
                type = FilterType.ANNOTATION,
                classes = Controller.class
        )
)
public class SpringConfig {
}

  • 将SpringMvcConfig中的@Configuration注解注释掉,创建模拟测试类App并运行
public class App {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        System.out.println(ctx.getBean(UserController.class));
    }
}

SpringMVC bean加载控制 -- SpringMVC入门保姆级教程(二)
我们发现找不到SpringMVC控制的UserController类,过滤成功

  1. 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
@Configuration
@ComponentScan({"com.itheima.service","com.itheima.dao"})
public class SpringConfig {
}

  1. 方式三:不区分加载SpringMVC和Spring的加载环境

//web容器配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载springmvc配置类,产生springmvc容器(本质还是spring容器)
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //加载spring配置类
    protected WebApplicationContext createRootApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringConfig.class);
        return ctx;
    }

}

4.SpringMVC bean控制相关知识点

  1. @ComponentScan注解

1.名称:@ComponentScan
2.类型:类注解
3.功能: 设置spring配置类加载bean时的过滤规则
4.属性:

includeFilters:加载指定的bean,需要指定类别(type)与具体项(Classes)
excludeFilters属性:设置扫描加载bean时,排除的过滤规则
type属性:设置排除规则,需要指定类别(type)与具体项(Classes)
classes属性:设置排除的具体注解类,当前设置排除@Controller定义的bean
5.范例:

SpringMVC bean加载控制 -- SpringMVC入门保姆级教程(二)

  1. 加载环境的简化开发
//web配置类简化开发,仅设置配置类类名即可
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
`博客内容借鉴了bilibili黑马程序员SSM课程资料,如有侵权,请联系作者删除`

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下作者,后续还会更新mybatis, springboot,maven高级,微信小程序,等前后端内容的学习笔记。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)文章来源地址https://www.toymoban.com/news/detail-465484.html

到了这里,关于SpringMVC bean加载控制 -- SpringMVC入门保姆级教程(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringMVC 请求与响应 -- SpringMVC快速入门保姆级教程(三)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章

    2024年02月08日
    浏览(27)
  • REST风格 -- SpringMVC入门保姆级教程(四)

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月06日
    浏览(30)
  • 【微服务】spring 控制bean加载顺序使用详解

    目录 一、前言 二、使用@order注解控制顺序 2.1 @order 注解使用示例 2.2 order注解顺序失效问题

    2024年02月08日
    浏览(27)
  • mybatis-plus+nacos配置中心和服务发现保姆级教程

     本文通过简单的示例代码和说明,让读者能够了解Mybatis-Plus+Nacos的简单使用  默认你已经看了我的Mybatis-Plus+Mysql的教程,现在有了一个简单的项目如下(之前的教程:  https://www.cnblogs.com/leafstar/p/17638741.html)   1.下载nacao,我这里下的是2.1.0版本 提供一下我用的版本( 链接:https

    2024年02月12日
    浏览(25)
  • cesium加载3dtile并将geojson进行叠加(保姆级教程)

    这段时间一直在研究这个问题,今天终于是解决了,受到了很多人的帮助,不然可能还要很久才能摸索出方法。 在开始之前,我们假设你已经知道了cesium的最基础的使用方法,比如下载cesium,启动cesium等。 好了,步入正题。首先你除了需要准备cesium的那些源码文件外还需要

    2023年04月08日
    浏览(32)
  • Unity教程2:保姆级教程.几行代码实现输入控制2D人物的移动

    目录 人物的创建以及刚体的设置 图层渲染层级设置 角色碰撞箱设置 使用代码控制人物移动 创建脚本文件  初始函数解释 控制移动代码 初始化变量  获得键盘输入  调用函数 手册链接在这:Unity User Manual (2019.3) - Unity 手册 没有控制人物移动的2D游戏就太说不过去了!那么接

    2024年02月06日
    浏览(31)
  • C++入门(保姆级教程)

    目录 一、C++ 二、命名空间 2.1 C语言中的命名冲突  2.2 C++中命名空间 2.2.1 命名空间的定义 2.2.2 命名空间的特性 2.2.3 命名空间的使用 2.2.4 补充知识 2.2.4 C++库的命名空间 三、C++中的输入输出 四、缺省参数 4.1  定义 4.2 缺省参数的分类 4.2.1 全缺省参数 4.2.2 半缺省参数

    2024年02月07日
    浏览(31)
  • Android 逆向入门保姆级教程

    作者:37手游移动客户端团队 前言 什么是 Android 逆向开发? Android 逆向开发是指对已发布的 Android 应用进行分析和破解,以了解应用程序的内部工作原理,获取应用程序的敏感信息,或者修改应用程序的行为。逆向开发可以帮助开发人员了解他人的代码实现,也可以帮助黑客

    2024年02月11日
    浏览(36)
  • Midjourney保姆级入门教程

    在 AI 画图领域,midjourney 目前是效果最好的一个工具,目前已经更新到 V5 版本,生成的各种神图层出不穷,什么国足夺冠、特朗普插秧、教皇打碟、异形下乡…… 只要你敢想AI就敢画,而且随便拿出一张都能做到以假乱真的程度。 本文对该工具的使用方法进行一个详细的介

    2024年02月02日
    浏览(33)
  • SpringBoot 快速入门(保姆级详细教程)

    作者:大三的土狗 专栏:SpringBoot入门到精通 SpringBoot 时 Spring家族中的一个全新框架,用来简化spring程序的创建和开发过程。 SpringBoot化繁为简,使开发变得更加的简单迅速。   Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及

    2023年04月19日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包