简单认识框架

hi,大家好,好久不见今天为大家带来框架相关的知识

文章目录

🌸1.框架

🥝1.1为什么要学习框架

之前的学习我们都没有接触过框架,所有的代码都需要我们自己写,而有了框架,我们只需要写部分代码,框架更加易用简单高效

🌸2.框架的优点

我们先采用SpringBoot和Servlet来对比

使用SpringBoot项目演示框架相对于使用servlet具有的优点

1.不用配置Tomcat,点击运行就行,因为Spring Boot内置了Tomcat

2.可以快速添加jar包(不用再到中央仓库复制粘贴)

3.快速发布项目(采用java -jar)就能发布

4.对象自动装配

还有很多优点,我们之后会进行详细的讲解,今天就先简单心里有个数

🥝2.1采用servlet创建项目

我们之前以及学习过了servle项目的创建

步骤为以下七步

🌻🌻🌻1.创建项目

🌻🌻🌻2.引入依赖

🌻🌻🌻3.创建目录

🌻🌻🌻4.编写代码

🌻🌻🌻5.打包程序

🌻🌻🌻6.部署程序

🌻🌻🌻7.验证程序

具体内容详见链接: http://t.csdn.cn/h9Xs8

👀2.1.1缺陷

我们由上述步骤可以看到很繁琐,

  1. 添加外部 jar 不⽅便,容易出错,⽐如添加了⼀个不匹配的外部 jar 版本;
  2. 运⾏和调试的时候需要配置 tomcat 不⽅便;
  3. 发布不⽅便,servlet 项⽬必须依靠外置的 tomcat(外置的 web 容器)运⾏。
  4. 路由配置不⽅便,⼀个访问地址对应⼀个 Servlet 类。
    但是采用springboot可以解决这些问题

🥝2.2采用SpringBoot创建项目

我们现在就来创建一个springboot项目让大家来感受一下

我们就先不详细介绍创建springboot的创建步骤了,后面再详细说

这个就是当一个springboot项目创建好以后展示的画面,我们在绿色的Java中创建一个TestController类

java 复制代码
package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller //当前类为控制器
@ResponseBody //返回的是数据,而非页面
public class TestController {

    @RequestMapping("/hi") //url 路由
    public String shaHi(String name) {
      
        if (!StringUtils.hasLength(name)) {
            name = "张三";
        }
        return "你好:" + name;
    }

}

要怎么运行呢,非常简单,点击三角符号,就可以运行了


上浏览器查看是否验证是否成功

成功了!

👀2.2.1优势

1.调试项⽬更加⽅便,⽆需配置 Tomcat

2.添加外部 jar 更容易,不易出错(版本问题⽆关注)

3.发布项⽬更加⽅便,⽆需配置 Tomcat

4.添加路由更加⽅便,⽆需每个访问地址都添加⼀个类,servlet是一个类对应一个URL,而springboot是一个方法对应一个URL

🌸3.Spring是什么

Spring是Spring Framework(Spring框架),这是一个开源框架

一句话来说,Spring是包含了众多工具方法的IOC容器

什么是容器?什么是IOC?什么是IOC容器?

🥝3.1 容器

容器是容纳物品的装置容器还是很通俗易懂的嘛,我们之前其实学过一些容器,数据结构里的List,Map,这些属于数据存储容器,还有Tomcat也会容器,属于Web容器

🥝3.2 Ioc

Inversion of Control,控制权反转

即对象的生命周期不由程序员/代码控制,而是由Spring(ioc容器)控制

🥝3.3 IOC容器

IOC容器就是控制权反转容器,以前使用对象要new,现在不用new了,只需要去spring(IOC容器)中去取,拿过来直接用

🥝代码理解IOC和传统开发的区别

我们就拿造一台车来举例

这几个部件存在依赖关系

写代码

java 复制代码
public class Car {
    private Framework framework;
    public Car(){
        this.framework=new Framework();
    }
    public void init(){
        System.out.println("执行Car的init方法");
        framework.init();
    }
}
java 复制代码
public class Framework {
    private Bottom bottom;
    public Framework(){
        this.bottom=new Bottom();

    }
    public void init(){
        System.out.println("执行Frameworkd的方法");
        bottom.init();
    }
}
java 复制代码
public class Bottom {
    private Tire tire;
    public Bottom(){
        this.tire=new Tire();
    }
    public  void init(){
        System.out.println("执行Bottom的init方法");
        tire.init();
    }
}
java 复制代码
public class Tire {
    public int size=10;
    public Tire(){

    }
    public void init(){
        System.out.println("执行tire方法 size"+size);

    }
}
java 复制代码
public class Test {
    public static void main(String[] args) {
        Car  car=new Car();
        car.init();
    }
}

执行结果

当轮胎尺寸变化,比如要变成30,每一个代码都要改

java 复制代码
public class Tire {
    public int size=10;
    public Tire(int size){
        this.size=size;
    }
    public void init(){
        System.out.println("执行tire方法 size"+size);

    }
}
java 复制代码
public class Bottom {
    private Tire tire;
    public Bottom(int size){
        this.tire=new Tire(size);
    }
    public  void init(){
        System.out.println("执行Bottom的init方法");
        tire.init();
    }
}
java 复制代码
public class Framework {
    private Bottom bottom;
    public Framework(int size){
        this.bottom=new Bottom(size);

    }
    public void init(){
        System.out.println("执行Frameworkd的方法");
        bottom.init();
    }
}
java 复制代码
public class Car {
    private Framework framework;
    public Car(int size){
        this.framework=new Framework(size);
    }
    public void init(){
        System.out.println("执行Car的init方法");
        framework.init();
    }
}
java 复制代码
public class Test {
    public static void main(String[] args) {
        Car  car=new Car(30);
        car.init();
    }
}

我们只是对Tire类里的构造方法加了一个属性,就会导致所有代码都出现问题,这就是牵一发而动全身,代码的耦合性太高了,那么我们采用IOC容器来解决这个问题

java 复制代码
public class Car {
    private Framework framework;
    public Car(Framework framework){
        this.framework = framework;
//        framework = new Framework();
    }
    public void init(){
        System.out.println("Car init");
        framework.init();
    }
}
java 复制代码
public class Framework {
    private Bottom bottom;
    public Framework(Bottom bottom){
        this.bottom = bottom;
    }
    public void init(){
        System.out.println("Framework init");
        bottom.init();
    }
}
java 复制代码
public class Bottom {
    private Tire tire;
    public Bottom(Tire tire){
        this.tire = tire;
    }
    public void init(){
        System.out.println("Bottom init");
        tire.init();
    }
}
java 复制代码
public class Tire {
    private int size = 15;
    public Tire(int size){
        this.size = size;
    }
    public void init(){
        System.out.println("Tire init, Size:"+size);
    }
}
java 复制代码
public class Test {
    private Tire tire;
    private Bottom bottom;
    private Framework framework;
    private Car car;
    public Test(){
        this.tire = new Tire(12);
        this.bottom = new Bottom(this.tire);
        this.framework = new Framework(this.bottom );
        this.car = new Car(this.framework);
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.car.init();
    }
}

我再想修改我就在IOC容器里面修改,和那些调用代码无关,我只是调用你,我不管你内部的属性啊啥的,与我无瓜~~~

总结:IOC优点
1.控制权反转:对象的生命周期由spring(IOC容器)控制,不由代码或者程序员控制

2.实现解耦(松耦合),就拿这个车的例子可以看出

今天的讲解就到此结束,我们下期再见,886~~

相关推荐
专注API从业者23 分钟前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠40 分钟前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY1 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克32 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠2 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌2 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局3 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化
阿丰资源3 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
呱牛do it3 小时前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
java
消失的旧时光-19434 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解