简单认识框架

news2024/12/22 6:06:16

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

文章目录

  • 🌸1.框架
    • 🥝1.1为什么要学习框架
  • 🌸2.框架的优点
    • 🥝2.1采用servlet创建项目
      • 👀2.1.1缺陷
    • 🥝2.2采用SpringBoot创建项目
      • 👀2.2.1优势
  • 🌸3.Spring是什么
    • 🥝3.1 容器
    • 🥝3.2 Ioc
    • 🥝3.3 IOC容器
    • 🥝代码理解IOC和传统开发的区别

🌸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类

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和传统开发的区别

我们就拿造一台车来举例
在这里插入图片描述
这几个部件存在依赖关系
写代码

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

    }
    public void init(){
        System.out.println("执行Frameworkd的方法");
        bottom.init();
    }
}
public class Bottom {
    private Tire tire;
    public Bottom(){
        this.tire=new Tire();
    }
    public  void init(){
        System.out.println("执行Bottom的init方法");
        tire.init();
    }
}

public class Tire {
    public int size=10;
    public Tire(){

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

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

执行结果
在这里插入图片描述
当轮胎尺寸变化,比如要变成30,每一个代码都要改

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

    }
}
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();
    }
}
public class Framework {
    private Bottom bottom;
    public Framework(int size){
        this.bottom=new Bottom(size);

    }
    public void init(){
        System.out.println("执行Frameworkd的方法");
        bottom.init();
    }
}
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();
    }
}

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

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

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();
    }
}
public class Framework {
    private Bottom bottom;
    public Framework(Bottom bottom){
        this.bottom = bottom;
    }
    public void init(){
        System.out.println("Framework init");
        bottom.init();
    }
}
public class Bottom {
    private Tire tire;
    public Bottom(Tire tire){
        this.tire = tire;
    }
    public void init(){
        System.out.println("Bottom init");
        tire.init();
    }
}
public class Tire {
    private int size = 15;
    public Tire(int size){
        this.size = size;
    }
    public void init(){
        System.out.println("Tire init, Size:"+size);
    }
}
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~~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/773217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue-Cli脚手架的安装和使用

文章目录 一、Vue-Cli脚手架的环境准备1. 安装Node.js1-1 去 [Node.js官网](https://nodejs.org/zh-cn/) 下载安装包,修改安装路径到其它盘,如 G:\Program Files1-2 安装npm淘宝镜像,提速 2. 设置 cnpm的下载路径和缓存路径2-1 在安装目录 G:…

Zoho Projects:Jira的理想替代品,让项目管理更高效

在软件开发生命周期中,项目管理一直是一个非常重要的环节。为了更好地协作、追踪项目的进程和管理任务,许多公司选择了Jira这款著名的项目管理工具,它是个非常强大的工具,但同时也有非常明显的缺点。今天,我们将向大家…

知识普及:[18F]FB RGD,18F标记RGD多肽,tumor显像剂,

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 为大家介绍(CAS:N/A),试剂仅用于科学研究,不可用于人类,非药用,非食用 分子式:C34H44FN9O9 分子量:740.8 中文名称&#xff1a…

linux之Ubuntu系列 系统信息 (一)查看文件、磁盘 、进程

时间和日期 查看当前的系统时间 date 查看日历 -y 显示本年度日历, 不加-y 选项,显示本月日历 cal [-y] 查看磁盘 和 目录 空间 df [-h] df:disk free 显示磁盘可用空间,-h,跟 ls -lh 效果类似,以人性化方…

Python 字典 get()函数使用详解,字典获取值

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 get函数使用详解 1、设置默认返回值2、嵌套字典取值3、get() 和 dict[key] 的区别…

使用WebRTC实现多人视频会议

1.初步准备 1.1.使用同事nodejs开发的一个信令服务器。提供Https的WebSocket功能 1.2.准备一个多人视频会议的客户端Web程序client.html 2.遇到问题 2.1.在Tomcat下打开client.html,如果不使用http://127.0.0.1:8081/vedio/client.html,而使用实际IP…

DETR的位置编码

记录一下,以防忘记。 首先,致谢知乎vincent DETR论文详解 DETR中有这样一个类和一个包装函数 class NestedTensor(object):def __init__(self, tensors, mask: Optional[Tensor]):self.tensors tensorsself.mask maskdef to(self, device):# type: …

C知道,CSDN 出来的AI尝试

已经上图,算力不知道怎么样。 C知道 (csdn.net)

JDK、JRE与JVM三者之间的关系及区别

文章目录 0、关系1、JDK2、JRE3、JVM 0、关系 JDK JRE Java 开发工具包 [Java,Javac,Javadoc,Javap等]JRE JVM Java 的核心类库 1、JDK 什么是JDK,JDK是用于Java程序开发的最小环境,包含:Java程序设计语言,Java虚拟机&#…

git : 从入门到实战进阶

目录 0. 前言 1. git stash: 暂时保存本地修改 2. git push时发生冲突怎么办? 3. 访问过去的提交版本:git checkout 3.1 detached HEAD 3.2 “detached HEAD”状态下所作的修改会怎样呢? 3.3 “detached HEAD”状态下所作的修改如何汇…

leetcode100.相同的树

⭐️ 题目描述 🌟 leetcode链接:相同的树 1️⃣ 代码: bool isSameTree(struct TreeNode* p, struct TreeNode* q){// 判断两棵树当前结点是否为空if (p NULL && q NULL) {// 说明是相同的return true;}// 来到这里有几种情况// …

causal-learn ModuleNotFoundError: No module named ‘pygam‘

调用 causallearn 库包,测试CAM-UV算法时报错: No module named pygam 解决方法: pip install pygam 参考链接: 【Python Causal Learning Toolbox】causallearn 库包的使用、报错修改_板砖板砖我是兔子的博客-CSDN博客

java ArratList深拷贝

引用深拷贝 便捷方法 class Test {public static void main(String[] args) {ArrayList<User> list new ArrayList<>();for (int i 0; i < 3; i) {User user new User(i, "name" i);list.add(user);}ArrayList<User> list1 new ArrayList…

超细致的性能测试流程,你get了吗?

性能测试&#xff1a;利用工具模拟大量用户操作&#xff0c;验证系统承受的负载情况。 性能测试的目的&#xff1a;找到潜在的性能问题或瓶颈&#xff0c;分析并解决&#xff1b;找出性能变化趋势&#xff0c;为后续扩展系统提供参考。测试监控&#xff1a;基准测试、配置测试…

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取

Spring的开发要点总结 文章目录 【JavaEE】Spring的开发要点总结&#xff08;1&#xff09;1. DI 和 DL1.1 DI 依赖注入1.2 DL 依赖查询1.3 DI 与 DL的区别1.4 IoC 与 DI/DL 的区别 2. Spring项目的创建2.1 创建Maven项目2.2 设置国内源2.2.1 勾选2.2.2 删除本地jar包2.2.3 re…

(栈队列堆) 剑指 Offer 31. 栈的压入、弹出序列 ——【Leetcode每日一题】

❓ 剑指 Offer 31. 栈的压入、弹出序列 难度&#xff1a;中等 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如&#xff0c;序列 {1,2,3,4,5} 是某栈的压栈序列&#xff0c;序…

好的CRM需要有哪些特点?

CRM客户管理系统在企业中占有举足轻重的地位&#xff0c;既是战略工具又可以强化部门间的团队协作、优化销售流程、缩短销售周期。市面上crm做得比较好的公司有哪些&#xff1f; 1.上榜Gartner魔力象限 好的CRM市场的引领、产品研发的持续投入、技术创新以及不断增长的市场份…

面试题 02.07. 链表相交

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&#x…

划片机的作用将晶圆分割成独立的芯片

划片机是将晶圆分割成独立芯片的关键设备之一。在半导体制造过程中&#xff0c;晶圆划片机用于将整个晶圆切割成单个的芯片&#xff0c;这个过程被称为“晶圆分割”或“晶圆切割”。 晶圆划片机通常采用精密的机械传动系统、高精度的切割刀具和先进的控制系统&#xff0c;以确保…