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-472278.html

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

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

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

相关文章

  • 初识SpringMVC -- SpringMVC入门保姆级教程(一)

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

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

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

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

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

    2023年04月19日
    浏览(31)
  • SpringBoot配置 -- SpringBoot快速入门保姆级教程(二)

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

    2024年02月08日
    浏览(24)
  • 初识Mybatis -- Mybatis快速入门保姆级教程(一)

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

    2024年02月08日
    浏览(28)
  • 初识SpringBoot -- SpringBoot快速入门保姆级教程(一)

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

    2024年02月08日
    浏览(22)
  • 初识Spring -- Spring快速入门保姆级教程(一)

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

    2024年02月07日
    浏览(30)
  • Spring注解开发 -- Spring快速入门保姆级教程(二)

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

    2024年02月09日
    浏览(33)
  • Spring AOP -- Spring快速入门保姆级教程(三)

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

    2024年02月07日
    浏览(33)
  • Spring事务管理 -- Spring快速入门保姆级教程(五)

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

    2024年02月08日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包