0


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
publicinterfaceUserDao{@Insert("insert into tbl_user(name,age)values(#{name},#{age})")publicvoidsave(User user);}
  • 创建数据层dao实体类User
publicclassUser{private Integer id;private String name;private Integer age;}
  • 创建service服务接口UserService
publicinterfaceUserService{publicvoidsave(User user);}
  • 创建servide服务接口实现类UserServiceImpl
@ServicepublicclassUserServiceImplimplementsUserService{publicvoidsave(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 [email protected](
                type = FilterType.ANNOTATION,
                classes = Controller.class))publicclassSpringConfig{}
  • 将SpringMvcConfig中的@Configuration注解注释掉,创建模拟测试类App并运行
publicclassApp{publicstaticvoidmain(String[] args){
        AnnotationConfigApplicationContext ctx =newAnnotationConfigApplicationContext(SpringConfig.class);
        System.out.println(ctx.getBean(UserController.class));}}

在这里插入图片描述
我们发现找不到SpringMVC控制的UserController类,过滤成功

  1. 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
@Configuration@ComponentScan({"com.itheima.service","com.itheima.dao"})publicclassSpringConfig{}
  1. 方式三:不区分加载SpringMVC和Spring的加载环境
//web容器配置类publicclassServletContainersInitConfigextendsAbstractDispatcherServletInitializer{//加载springmvc配置类,产生springmvc容器(本质还是spring容器)protected WebApplicationContext createServletApplicationContext(){
        AnnotationConfigWebApplicationContext ctx =newAnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);return ctx;}protected String[]getServletMappings(){returnnewString[]{"/"};}//加载spring配置类protected WebApplicationContext createRootApplicationContext(){
        AnnotationConfigWebApplicationContext ctx =newAnnotationConfigWebApplicationContext();
        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.范例:

在这里插入图片描述

  1. 加载环境的简化开发
//web配置类简化开发,仅设置配置类类名即可publicclassServletContainersInitConfigextendsAbstractAnnotationConfigDispatcherServletInitializer{protected Class<?>[]getRootConfigClasses(){returnnewClass[]{SpringConfig.class};}protected Class<?>[]getServletConfigClasses(){returnnewClass[]{SpringMvcConfig.class};}protected String[]getServletMappings(){returnnewString[]{"/"};}}

在这里插入图片描述

总结

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

标签: mybatis spring java

本文转载自: https://blog.csdn.net/HHX_01/article/details/130911183
版权归原作者 东离与糖宝 所有, 如有侵权,请联系我们删除。

“SpringMVC bean加载控制 -- SpringMVC入门保姆级教程(二)”的评论:

还没有评论