简单认识框架

简介: 简单认识框架

🌸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缺陷

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


添加外部 jar 不⽅便,容易出错,⽐如添加了⼀个不匹配的外部 jar 版本;

运⾏和调试的时候需要配置 tomcat 不⽅便;

发布不⽅便,servlet 项⽬必须依靠外置的 tomcat(外置的 web 容器)运⾏。

路由配置不⽅便,⼀个访问地址对应⼀个 Servlet 类。

但是采用springboot可以解决这些问题


🥝2.2采用SpringBoot创建项目


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

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


016acf587356450c9eab9fcf42e6dbd8.png

这个就是当一个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;
    }
}

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

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

c720bb7b4e89405b959e0dc4e1fbf97b.png


成功了!


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


我们就拿造一台车来举例

ff0bccbd17e14d4b8b9ac2c484176bf9.png


这几个部件存在依赖关系

写代码


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 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 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~~


相关文章
|
6月前
|
JSON API 数据库
使用现代的接口标准和框架
【5月更文挑战第9天】FastAPI是一个基于Python3.6以上版本的类型注解构建的现代化API框架,它提供自动补全和类型检查,数据校验及清晰的错误信息,支持多种输入输出格式,如JSON、路径参数等。利用OpenAPI和JSON Schema自动生成交互式API文档,兼容Swagger UI和ReDoc。FastAPI基于类型注解进行参数校验,内置安全性功能,包括HTTP基本认证和OAuth2。
109 1
|
6月前
|
存储 自然语言处理 JavaScript
vben框架是什么
vben框架是什么
1576 0
|
6月前
|
前端开发 JavaScript
框架
框架
35 3
|
机器学习/深度学习 计算机视觉
AIGM 框架
AIGM (Adaptive Image Generation and Manipulation) 是一个基于深度学习的图像生成和处理框架。它使用先进的生成对抗网络 (GAN) 和变分自编码器 (VAE) 技术,可以实现图像的自动生成、转换、编辑和增强等功能。
235 8
v4l2框架
v4l2框架
119 0
|
IDE Linux 开发工具
C++之openFrameworks框架
openFrameworks(简称 oF)是一个基于C++的开源库。 它提供了丰富的功能库和工具,用于快速开发多媒体、交互性和艺术创作相关的应用程序,如艺术装置、互动艺术、音视频作品、实时图形等。oF 的设计目标是让创意编程变得更加简单、直观和灵活,使艺术家、设计师、创意工作者等能够利用编程进行创作和表达。oF提供了丰富的图形、音频、输入输出、计算机视觉等功能库,并支持跨平台开发,适用于Windows、Mac OSX、Linux等操作系统。oF的社区活跃,有大量的用户和开发者共享和贡献了各种扩展、插件和示例代码。
133 0
|
程序员 测试技术
【提高自己】正确的工作方法,形成自己的思考框架
在学习过程中,将老师的知识用脑图的形式记录下来,在这里做个分享,不足之处欢迎大家指出。
|
SQL JSON 前端开发
|
传感器
CoreMotion 框架
CoreMotion框架(一)—— 基础理论CoreMotion框架(三)—— 获取陀螺仪数据CoreMotion框架(二)—— 利用加速度计获取设备的方向CoreMotion框架(四)—— 仿摩拜贴纸小球碰撞动画 ...
974 0
下一篇
无影云桌面