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控制的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.范例:

  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高级,微信小程序,等前后端内容的学习笔记。


相关文章
|
2月前
|
Java 应用服务中间件 Spring
SpringMVC快速入门加登录流程分析
SpringMVC快速入门加登录流程分析
42 0
|
2月前
|
Java Spring
SpringMVC中bean的加载控制
SpringMVC中bean的加载控制
26 0
|
10月前
|
前端开发 Java 数据库连接
SpringMVC快速入门
SpringMVC快速入门
|
10月前
|
前端开发 Java 数据库连接
【SpringMVC】JSR 303与interceptor拦截器快速入门
JSR 303是Java规范请求(Java Specification Request)的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。 JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibe
|
12月前
|
XML 存储 前端开发
解析 SpringMVC 父子容器及九大内置组件加载过程
解析 SpringMVC 父子容器及九大内置组件加载过程
89 1
|
开发框架 前端开发 Java
初识SpringMVC -- SpringMVC快速入门保姆级教程(一)
初识SpringMVC -- SpringMVC快速入门保姆级教程(一)
113 0
|
前端开发 JavaScript Java
REST风格 -- SpringMVC快速入门保姆级教程(四)
REST风格 -- SpringMVC快速入门保姆级教程(四)
|
JSON 程序员 数据格式
SpringMVC 请求与响应 -- SpringMVC快速入门保姆级教程(三)(2)
SpringMVC 请求与响应 -- SpringMVC快速入门保姆级教程(三)
|
Java 应用服务中间件 Spring
SpringMVC 请求与响应 -- SpringMVC快速入门保姆级教程(三)(1)
SpringMVC 请求与响应 -- SpringMVC快速入门保姆级教程(三)
|
2月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】