当前位置: 首页 > article >正文

软件设计之SSM(1)

软件设计之SSM(1)

路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
尚硅谷新版SSM框架全套视频教程,Spring6+SpringBoot3最新SSM企业级开发
资料可以去尚硅谷官网免费领取

学习内容:

  1. Spring框架结构
  2. SpringIoC容器
  3. SpringIoC实践与应用

1、Spring框架结构

Spring是一个开源的Java框架,旨在简化Java企业级应用的开发。Spring Framework是其核心部分,提供了依赖注入、面向切面编程和事务管理等功能。所以一般Spring框架指的是Spring Framework,广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。

Spring Framework主要功能模块

模块功能描述
核心容器提供对象管理和依赖注入,支持Bean配置和生命周期管理。
AOP支持面向切面编程,允许将横切关注点(如日志、事务)与业务逻辑分离。
数据访问/集成简化JDBC操作,支持ORM框架(如Hibernate),提供数据访问的统一方式。
Web模块支持Spring MVC架构,创建Web应用程序,提供REST支持和文件上传功能。
安全模块提供Spring Security,用于应用程序的身份验证和授权。
消息模块提供对消息中间件(如JMS)的支持,支持异步处理。
声明式事务管理通过注解或XML配置简化事务管理,允许在方法上声明事务属性,自动处理事务边界。

2、SpringIoC容器

  • 在Spring框架中,组件是指由Spring容器管理的对象,通常被称为Bean。这些Bean可以是服务、控制器、数据访问对象等,Spring负责它们的创建、配置和生命周期管理。
    在这里插入图片描述

  • 组件管理是Spring的核心功能之一,主要通过IoC(控制反转) 实现。IoC容器负责管理对象的创建和它们之间的依赖关系,这使得应用程序的各个部分之间的耦合度降低,从而提高了可维护性和可测试性。

组件一定是对象,对象不一定是组件

  1. 组件是对象

    • 在Spring框架中,组件(通常称为Bean)是通过Spring IoC容器管理的对象。它们的创建、配置和生命周期管理都是由Spring负责。
  2. 对象不一定是组件

    • 在Java中,任何通过new关键字创建的实例都是对象,但这些对象并不一定由Spring容器管理。如果一个对象没有被Spring管理,就不能享受Spring提供的特性,比如依赖注入、生命周期管理等。
  3. 可复用的Java对象

    • 组件通常被设计为可以在不同的上下文中重复使用。因为它们遵循了良好的设计原则,比如单一职责原则和依赖注入,它们的逻辑可以在不同的场景中使用,而不需要进行大量修改。

复杂容器概念引入

  1. 复杂容器指的是具有多个层次和功能的容器,能够管理和控制多个组件的生命周期、配置和交互。Tomcat不仅负责Servlet的执行,还处理了许多其他功能,如请求处理、线程管理、会话管理等。
  2. Spring IoC 容器,负责实例化、配置和组装 bean(组件)。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这些组件之间丰富的相互依赖关系。

IoC容器接口介绍

Spring IoC容器主要通过两个接口来实现:BeanFactoryApplicationContext。它们都负责管理Bean,但有一些关键的区别和扩展功能。

特性BeanFactoryApplicationContext
定义Spring IoC容器的基本接口BeanFactory的子接口,提供更丰富的功能
实例化方式延迟初始化,仅在需要时创建Bean预实例化,在启动时创建所有单例Bean
国际化支持支持多种语言和地区的国际化功能
事件传播支持事件发布和监听机制,允许组件间的通信
AOP支持提供面向切面编程的支持
适用场景轻量级应用,资源使用要求较高的场景复杂应用,特别是需要更多功能的企业级应用

ApplicationContext容器实现类

上下文类型功能描述加载方式说明
ClassPathXmlApplicationContext从类路径加载XML配置文件,适用于在类路径下有配置文件的应用,通常用于标准的Java SE应用。从classpath根目录加载配置文件,通常是项目的类路径下的resources
FileSystemXmlApplicationContext从文件系统加载XML配置文件,适用于需要从任意路径加载配置文件的场景,能够处理绝对或相对路径。直接从文件系统读取配置文件,可以使用绝对路径或相对路径。
AnnotationConfigApplicationContext以Java注解方式加载配置,适合使用注解定义Bean和依赖关系的应用,支持使用@Configuration@Component注解。通过扫描指定包或类,解析注解以注册Bean。
WebApplicationContext特殊类型的ApplicationContext,用于Web应用,提供额外的功能,如处理Web层的Bean、会话管理等,支持多种Web功能。通常在Web应用中由ContextLoaderListenerDispatcherServlet加载,支持XML和注解配置。

配置方式

Spring框架提供了多种配置方式:XML配置方式、注解方式和Java配置类方式

特点XML配置Java配置注解配置
配置形式使用XML文件定义Bean使用带有@Configuration注解的类定义Bean使用类上的注解(如@Component等)自动扫描
类型安全
可读性可读性一般,依赖于XML格式可读性好,遵循Java语法可读性好,直接在类上定义
灵活性灵活,但修改后需重启应用灵活,支持Java编程中的逻辑灵活,支持灵活的包扫描
示例<bean id="myBean" class="com.example.MyClass"/>@Bean public MyClass myBean() {...}@Component public class MyClass {...}
依赖注入方式通过<property><constructor-arg>标签通过方法参数和返回值通过构造函数、字段或方法
启动方式需要手动指定XML文件通过Java类自动加载配置通过@ComponentScan自动扫描

容器、IoC、DI

在这里插入图片描述

3、SpringIoC实践与应用

实现步骤

  1. 配置元数据,此处以XML为例
  • Spring IoC 容器管理一个或多个组件。这些组件是使用你提供给容器的配置元数据(例如,以 XML <bean/> 定义的形式)创建的。

  • <bean /> 标签 == 组件信息声明

    • id 属性是标识单个 Bean 定义的字符串。
    • class 属性定义 Bean 的类型并使用完全限定的类名。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 此处要添加一些约束,配置文件的标签并不是随意命名 -->
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    https://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="..." [1] class="..." [2]>  
    <!-- collaborators and configuration for this bean go here -->
  </bean>

  <bean id="..." class="...">
    <!-- collaborators and configuration for this bean go here -->
  </bean>
  <!-- more bean definitions go here -->
</beans>
  1. 实例化IoC容器
  • 提供给 ApplicationContext 构造函数的位置路径是资源字符串地址,允许容器从各种外部资源(如本地文件系统、Java CLASSPATH 等)加载配置元数据。
  • 选择一个合适的容器实现类,进行IoC容器的实例化工作:此处以ClassPathXmlApplicationContext为例
//实例化ioc容器,读取外部配置文件,最终会在容器内进行ioc和di动作
ApplicationContext context = 
           new ClassPathXmlApplicationContext("services.xml", "daos.xml");
  1. 获取Bean(组件)
  • ApplicationContext 是一个高级工厂的接口,能够维护不同 bean 及其依赖项的注册表。通过使用方法 T getBean(String name, Class<T> requiredType) ,可以检索 bean 的实例。允许读取 Bean 定义并访问它们,如以下示例所示:
//创建ioc容器对象,指定配置文件,ioc也开始实例组件对象
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
//获取ioc容器的组件对象
PetStoreService service = context.getBean("petStore", PetStoreService.class);
//使用组件对象
List<String> userList = service.getUsernameList();

http://www.kler.cn/a/323783.html

相关文章:

  • PMP--一、二、三模、冲刺--分类--变更--技巧--特点
  • 琐碎笔记——pytest实现前置、后置、参数化、跳过用例执行以及重试
  • 效率工具-tig的使用
  • vue如何实现组件切换
  • Redis下载历史版本
  • 树状数组+概率论,ABC380G - Another Shuffle Window
  • PWM基础与信号控制
  • C++动态规划问题—第 N 个泰波那契数
  • 物联网助力智慧交通:优势与前景
  • ScrapeGraphAl AI爬虫
  • 零基础教你如何开发webman应用插件
  • Mybatis中字段返回值映射问题
  • XXL-JOB在SpringBoot中的集成
  • 【Redis】安装redis-plus-plus
  • Trick : pair 的二分问题
  • mariadb无法存储中文
  • Colorful/七彩虹将星X17 AT 22 Win11原厂OEM系统 带COLORFUL一键还原
  • 今年Java回暖了吗
  • 根据标签实现CD
  • HJ50-四则运算:栈的运用、中缀表达式转后缀表达式并计算结果
  • C++(9.26)
  • FastReport时间格式化(含判空)
  • Python办公自动化之Word
  • 探索未来:MultiOn,AI的下一个革命
  • 示例说明:elasticsearch实战应用
  • 等保托管怎么样,流程是什么样的?