一 SSM 整合理解

SSM整合理解

一 SSM整合什么

​ 以spring框架为基础,整合springmvc,mybatis框架,以更好的开发。

​ spring管理一切组件,为开发更好的解耦,以及提供框架的组件,如aop,tx。springmvc是表述层框架,专注于controller层开发。

mybatis是优秀的持久测层框架,专注于dao层开发,免除几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,而我们只需编写sql以及配置。这三个框架结合,大大提高了我们的开发效率。

二 整合的核心问题是什么

2.1 第一问:SSM整合需要几个IoC容器?

两个容器

本质上说,整合就是将三层架构和框架核心API组件交给SpringIoC容器管理!

一个容器可能就够了,但是我们常见的操作是创建两个IoC容器(web容器和root容器),组件分类管理!

这种做法有以下好处和目的:

1. 分离关注点:通过初始化两个容器,可以将各个层次的关注点进行分离。**这种分离使得各个层次的组件能够更好地聚焦于各自的责任和功能。**
2. 解耦合:各个层次组件分离装配不同的IoC容器,这样可以进行解耦。这种解耦合使得各个模块可以独立操作和测试,提高了代码的可维护性和可测试性。
3. 灵活配置:通过使用两个容器,可以为每个容器提供各自的配置,以满足不同层次和组件的特定需求。每个配置文件也更加清晰和灵活。

总的来说,初始化两个容器在SSM整合中可以实现关注点分离、解耦合、灵活配置等好处。它们各自负责不同的层次和功能,并通过合适的集成方式协同工作,提供一个高效、可维护和可扩展的应用程序架构!

2.2第二问:每个IoC容器对应哪些类型组件?

图解:
在这里插入图片描述
总结:

容器名盛放组件
web容器web相关组件(controller,springmvc核心组件)
root容器业务和持久层相关组件(service,aop,tx,dataSource,mybatis,mapper等)

2.3 第三问:IoC容器之间关系和调用方向?

情况1:两个无关联IoC容器之间的组件无法注入!
在这里插入图片描述

  • 父容器:root容器,盛放service、mapper、mybatis等相关组件
  • 子容器:web容器,盛放controller、web相关组件

源码体现:

FrameworkServlet 655行!

protected WebApplicationContext createWebApplicationContext(@Nullable ApplicationContext parent) {
  Class<?> contextClass = getContextClass();
  if (!ConfigurableWebApplicationContext.class.isAssignableFrom(contextClass)) {
    throw new ApplicationContextException(
        "Fatal initialization error in servlet with name '" + getServletName() +
        "': custom WebApplicationContext class [" + contextClass.getName() +
        "] is not of type ConfigurableWebApplicationContext");
  }
  ConfigurableWebApplicationContext wac =
      (ConfigurableWebApplicationContext) BeanUtils.instantiateClass(contextClass);

  wac.setEnvironment(getEnvironment());
  //wac 就是web ioc容器
  //parent 就是root ioc容器
  //web容器设置root容器为父容器,所以web容器可以引用root容器
  wac.setParent(parent);
  String configLocation = getContextConfigLocation();
  if (configLocation != null) {
    wac.setConfigLocation(configLocation);
  }
  configureAndRefreshWebApplicationContext(wac);

  return wac;
}

2.4 第四问:具体多少配置类以及对应容器关系?

配置类的数量不是固定的,但是至少要两个,为了方便编写,我们可以三层架构每层对应一个配置类,分别指定两个容器加载即可!
在这里插入图片描述
建议配置文件:

配置名对应内容对应容器
WebJavaConfigcontroller,springmvc相关web容器
ServiceJavaConfigservice,aop,tx相关root容器
MapperJavaConfigmapper,datasource,mybatis相关root容器

2.5 第五问:IoC初始化方式和配置位置?

在web项目下,我们可以选择web.xml和配置类方式进行ioc配置,推荐配置类。

对于使用基于 web 的 Spring 配置的应用程序,建议这样做,如以下示例所示:

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

 //指定root容器对应的配置类
 //root容器的配置类
 @Override
 protected Class<?>[] getRootConfigClasses() {
   return new Class<?>[] { ServiceJavaConfig.class,MapperJavaConfig.class };
 }
 
 //指定web容器对应的配置类 webioc容器的配置类
 @Override
 protected Class<?>[] getServletConfigClasses() {
   return new Class<?>[] { WebJavaConfig.class };
 }
 
 //指定dispatcherServlet处理路径,通常为 / 
 @Override
 protected String[] getServletMappings() {
   return new String[] { "/" };
 }
}

图解配置类和容器配置:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值