SSM框架从入门到入土(SpringFrameWork)

前言:在web前端我们学习了springboot这种简洁的spring框架,但是我们并不知道spring boot具体操作的原理,而springboot是基于springframework改造的,所以我们这章节通过对其的学习来加深对springboot的理解。

Framework的系统架构

如图所示:

IOC(Inversion of Control)控制反转

++使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。++

Spring技术对IOC思想进行了实现:
Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的外部
IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean

DI (Dependency Injection )依赖注入

++在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入++

依赖的本质

*Service依赖DAO的意思是:
**"*我的业务逻辑需要操作数据库,但我不想自己写SQL,所以我需要一个助手(DAO)帮我做这些脏活累活!"

依赖的可视化表现:
依赖绑定(传统Framework方式):
复制代码
<!-- applicationContext.xml -->
<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
           http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!-- 1. 定义DAO Bean -->
    <bean id="userDao" class="com.example.dao.UserDaoImpl">
        <!-- 可以注入DAO自己的依赖 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <!-- 2. 定义Service Bean -->
    <bean id="userService" class="com.example.service.UserServiceImpl">
        <!-- 绑定关键:ref属性指向userDao -->
        <property name="userDao" ref="userDao"/>
    </bean>
    
    <!-- 3. 数据源配置 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
</beans>

与Springboot的不同:

核心区别:入口方式不同

**Spring Framework的传统方式:**需要自己创建一个"启动类"来初始化Spring容器

类比:

为什么需要这个App类?

因为Spring Framework只是一个"工具箱",你需要:

  1. ++自己组装:告诉Spring配置文件在哪++

  2. ++自己启动:调用API初始化容器++

  3. ++自己管理:获取Bean并使用++

复制代码
public class MainApp { public static void main(String\[\] args) { // 1. 读取XML,创建容器 ApplicationContext context = new ClassPathXmlApplicationContext( "classpath:applicationContext.xml", "classpath:service-context.xml" // 可能还有多个配置文件 ); // 2. 手动获取Bean(麻烦!) UserService userService = (UserService) context.getBean("userService"); // 3. 使用 User user = new User("张三", "123456"); userService.register(user); // 4. 关闭容器(还要自己管理生命周期!) ((ClassPathXmlApplicationContext) context).close(); } }

**Spring Boot的现代方式:**Spring Boot自动帮你创建容器

复制代码
@SpringBootApplication   这个注解包含了一切!
public class MyApp {
    public static void main(String[] args) {
        // 这一行代码做了Spring Framework中100行代码的事!
        SpringApplication.run(MyApp.class, args);
    }
}
复制代码
 实际上@SpringBootApplication = 三个注解的合并
@SpringBootConfiguration     相当于@Configuration
@EnableAutoConfiguration     自动配置魔法!
@ComponentScan               自动扫描组件
public @interface SpringBootApplication {}

 SpringApplication.run()内部做了:
1. 创建Spring容器(根据classpath判断是Web还是普通应用)
2. 自动配置(根据依赖自动配置Bean)
3. 启动内嵌服务器(如果是Web应用)
4. 发布ApplicationStartedEvent事件
5. 调用CommandLineRunner
6. 启动完成!

bean的基础配置:我们在javaweb里学习过了,这里就不过多赘述。

相关推荐
CodeStats5 分钟前
【Java进程通信】Java进程通信系统完全指南:从ProcessBuilder底层原理到多语言实战
java·前端·python·进程·ai编程·processbuilder
绿智校园7 分钟前
物联网平台选型指南:为什么底层协议自研比云端SDK接入更可靠?
java·物联网·struts
T01156188 分钟前
艺培场馆课时预约小程序用户端 & 后台联动踩坑上篇(预约、课时、缓存、消息、学员端自身问题)
java·缓存·小程序·bug·全栈项目实战手记·艺培课时系统‘’
长谷深风11110 分钟前
AI Agent 踩坑:盲目重试会把小故障炸成系统灾难
java·大数据·ai·agent·ai agent·工具调用·agent设计
evans在进步34 分钟前
Spring Boot 核心机制详解:自动装配、事件监听、异步任务与请求映射
java·spring boot·后端
Zane199440 分钟前
HashSet、TreeSet、LinkedHashSet:底层都是"套壳"
java·后端
相顾若初见1 小时前
RuoYi后端jar镜像制作
java·jar
MacroZheng1 小时前
程序员看文档神器,装上它,看Spring官方文档就一目了然了!
java·人工智能·后端
骇客野人1 小时前
SpringBoot 接入 Kafka 完整实操步骤
spring boot·kafka·linq
深漂的华哥1 小时前
Ruoyi-Vue-Plus(V5.6.2) 开发环境搭建
java·前端·spring boot·后端·spring·ruoyi