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里学习过了,这里就不过多赘述。

相关推荐
源力祁老师2 小时前
深入解析 Odoo 中 default_get 方法的功能
java·服务器·前端
团子的二进制世界2 小时前
Sentinel-服务保护(限流、熔断降级)
java·开发语言·sentinel·异常处理
NWU_白杨2 小时前
多线程安全与通信问题
java
sheji34162 小时前
【开题答辩全过程】以 工业车辆维修APP设计与实现为例,包含答辩的问题和答案
java
虫小宝2 小时前
淘客系统的容灾演练与恢复:Java Chaos Monkey模拟节点故障下的服务降级与快速切换实践
java·开发语言
yxm26336690812 小时前
【洛谷压缩技术续集题解】
java·开发语言·算法
键盘帽子2 小时前
多线程情况下长连接中的session并发问题
java·开发语言·spring boot·spring·spring cloud
无名-CODING2 小时前
Spring事务管理完全指南:从零到精通(上)
java·数据库·spring
fengxin_rou2 小时前
【黑马点评实战篇|第一篇:基于Redis实现登录】
java·开发语言·数据库·redis·缓存