初识Spring

文章介绍了Spring框架的基本概念,包括IoC容器和DI(依赖注入),阐述了它们如何实现程序的解耦和简化开发。SpringBoot相较于Servlet的优点,如内置Web容器和快速部署,以及学习框架时可能遇到的难点。最后,提出了学习框架的建议和长期目标,强调掌握主流技术的实际应用能力。
摘要由CSDN通过智能技术生成

一、认识Spring

Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它之所以能⻓久不衰的原因。
Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级的应⽤程序开发起来更简单。⽤⼀句话概括 Spring:Spring 是包含了众多⼯具⽅法的 IoC 容器

1.1什么是容器

容器技术用来容纳某种物品(基本)装置
List/Map -> 数据存储容器
Tomcat -> Web 容器

1.2什么是IoC?

Spring是一个Ioc容器。
IoC = Inversion of Control 翻译成中⽂是“控制反转”的意思,也就是说 Spring 是⼀个“控制反转的容器”。
举个例子来证明Spring的开发好处。
先说明传统开发:
比如现在大火的造车:
构建⼀辆⻋(Car Class),然⽽⻋需要依赖⻋身(FrameWork Class),⽽⻋身需要依赖底盘(BottomClass),⽽底盘需要依赖轮胎(Tire Class)
轮胎简述

public class NewCarExample {
    public static void main(String[] args) {
        Car car=new Car(30);
        car.run();
    }
    //汽车对象
    static  class Car{
        private  Framework framework;
        public Car(int size){
            framework=new Framework(size);
        }
        public void run(){
            //依赖车身
            framework.init();
        }

    }
    //车身类
    static  class  Framework{
        private Bottom bottom;
        public Framework(int size){
            bottom=new Bottom(size);

        }
        public void init(){
            //依赖底盘

            bottom.init();
        }
    }
    //底盘类
    static  class Bottom{
        private  Tire tire;
        public Bottom(int size){
            tire=new Tire(size);
        }
        public void init(){
            //依赖轮胎

            tire.init();

        }
    }
    //轮胎类
    static class Tire{
        //尺寸
        private int size;
        public Tire(int size){
            this.size=size;
        }
        public void init(){
            System.out.println("轮胎尺寸:"+size);
        }

    }
}

缺点:
这里的程序是有一个问题,当底层代码改动之后,整个调用链上的所有代码都需要重新修改。
这样的程序耦合性高,而且改动成本高,这就好⽐我们打造⼀辆完整的汽⻋,如果所有的配件都是⾃⼰造,那么当客户需求发⽣改变的时候,⽐如轮胎的尺⼨不再是原来的尺⼨了,那我们要⾃⼰动⼿来改了。
如何解决?
如果我们是把轮胎外包出去,那么即使是轮胎的尺⼨发⽣变变了,我们只需要向代理⼯⼚下订单就⾏了,我们⾃身是不需要出⼒的。
那就引入了Spring的方式:
我们只需要将原来由⾃⼰创建的下级类,改为传递的⽅式(也就是注⼊的⽅式),因为我们不需要在当前类中创建下级类了,所以下级类即使发⽣变化(创建或减少参数),当前类本身也⽆需修改任何代码,这样就完成了程序的解耦。

1.3控制反转式程序开发

基于以上思路,我们把调⽤汽⻋的程序示例改造⼀下,把创建⼦类的⽅式,改为注⼊传递的⽅式,具体实现代码如下:

public class IocCarExample {
    public static void main(String[] args) {
        Tire tire=new Tire(20);
        Bottom bottom=new Bottom(tire);
        Framework framework=new Framework(bottom);
        Car car=new Car(framework);
        car.run();
    }
    static  class  Car{
        private  Framework framework;
        public Car (Framework framework){
            this.framework=framework;
        }
        public void run(){
            framework.init();
        }
    }
    static  class  Framework{
        private  Bottom bottom;
        public Framework(Bottom bottom){
            this.bottom=bottom;
        }
        public void init(){
            bottom.init();
        }
    }
    static  class  Bottom{
        private  Tire tire;
        public Bottom(Tire tire){
             this.tire=tire;
        }
        public void init(){
            tire.init();

        }
    }
    static  class  Tire{
        private int size;
        public Tire(int size){
            this.size=size;
        }
        public  void init(){
            System.out.println("轮胎"+size);
        }
    }

}

大家看出来了这两个区别了吗?

传统开发:从Car类就引入了size,然后size数据继续往下传递
Car->Framework->Bottom->Tire,最终呈现由Tire类的size数据呈现程序运行结果,所以如果我要新添加个Length数据,就需要一层一层加入,过程比较冗杂
Spring开发
从Car->Framework->Bottom->Tire传递的只是类的构建方法并不传递数据,所有的数据都是通过Tire一个类里构建的,后续我要是想增加或者删除数据,
只需修改Tire类就可以了,这样大大减少了开发成本
总结:在传统的代码中对象创建顺序是:Car -> Framework -> Bottom -> Tire改进之后解耦的代码的对象创建顺序是:Tire -> Bottom -> Framework -> Car
在这里插入图片描述

我们发现了⼀个规律:通⽤程序的实现代码,类的创建顺序是反的,传统代码是 Car 控制并创建了Framework,Framework 创建并创建了 Bottom,依次往下,⽽改进之后的控制权发⽣的反转,不再是上级对象创建并控制下级对象了,⽽是下级对象把注⼊将当前对象中,下级的控制权不再由上级类控制了,这样即使下级类发⽣任何改变,当前类都是不受影响的,这就是典型的控制反转,也就是 IoC 的实现思想

1.4理解Spring Ioc

既然 Spring 是⼀个 IoC(控制反转)容器,重点还在“容器”⼆字上,
那么它就具备两个最基础的功能:将对象存⼊到容器;从容器中取出对象。
也就是说学 Spring 最核⼼的功能,就是学如何将对象存⼊到 Spring 中,再从 Spring 中获取对象的过程。

IoC 容器和普通程序开发的区别:

将对象存放到容器中的好处:将对象存储在 IoC 容器相当于将以后可能⽤的所有⼯具制作好都放到仓库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。⽽ new 对象的⽅式相当于,每次需要⼯具
了,才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做,这就是 IoC 容器和普通程序开发的区别。
Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能⼒。

1.5DI的概念说明

说到 IoC 不得不提的⼀个词就是“DI”,DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注⼊”的意思。
所谓依赖注⼊,就是由 IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中。所以,依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,就是指通过引⼊ IoC 容器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦
IoC 是“⽬标”也是⼀种思想,⽽⽬标和思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽ DI就属于具体的实现
比如说我今天想打一把游戏,那么“打一把游戏”就是目标和思想(是Ioc),但最后我是选择COD还是CS? 这是就是具体的实现,就是DI

二、框架的优点展示(SpringBoot VS Servlet)

2.1优点展示:

使⽤ Spring Boot 项⽬演示框架相⽐于 Servlet 所具备的以下优点:

  1. ⽆需配置 Tomcat,点击“运⾏”按钮就可以运⾏项⽬,Spring Boot 内置了 Web 容器(可直接运⾏)。
  2. 快速添加外部 jar 包,添加外部 jar 更容易,不易出错(版本问题⽆需关注)。
  3. 快速发布项⽬(使⽤ java -jar ⽅式就可以发布)。
  4. 对象⾃动装配, 添加路由更加⽅便,⽆需每个访问地址都添加⼀个类。

2.2框架的学习难点

  1. 配置⽐较多。
  2. 需要⼤量的外部 jar 包,在下载时容易出错。
  3. 会涉及简单的软件⼯程的设计思想(分层思想:前、后端的分层思想;后端⼯程的分层思想)。
  4. 知识点相对来说⽐之前的知识更加的分散,要仔细听才能搞懂各个知识点的逻辑关系。
  5. 要记的东⻄很多,所以要⼤量地重复练习才能记住,⽐如各种注解。

三、如何学习框架

先从最基础框架Spring开始(工具箱)
Spring Boot 快速开发Spring 脚手架
MyBatis 快速操作数据库
其他:日志,事务,拦截器
Java 知识体系是世界上最丰富的涉及⾯最⼴的技术,它涉及主流技术栈:
JavaSE–MySQL–Maven–Servlet–Spring–Spring MVC–Spring Boot–MyBatis–Redis
–消息中间件(MQ):RabbitMQ、RocketMQ、Kafka
Spring Cloud(Alibaba)Nacos-Sentinel-Seata-Gateway

spring
…Dubbo/Zookeeper…

四、长久目标

向内:解决问题的能⼒
向外:在线 OJ刷题

最终目标:

1.使⽤主流的技术 SSM 做出来⼀个项⽬(分⻚功能、Session 持久化、密码加盐算法)。
2.掌握 SSM 从搭建到发布的全部流程。
3.具备解决和调试 SSM 项⽬的能⼒(重要)。

下一章问题:
Spring的最核心的功能是什么?

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值