[JAVAee]Spring的基础介绍

news/2024/7/24 5:51:14 标签: java-ee, spring, mybatis

本文章介绍了Spring大致是什么,核心的功能.

Spring是什么?

Spring指的是Spring Framework(Spring框架).

支持广大的开发场景,能够使应用开发变得简单.

其集成了各种工具,还实现了底层的类的实例化和生命周期的管理.

简单来说,Spring就是拥有众多工具方法的IoC容器

容器?

容器就是用来装载物品的工具.

List列表,Map图都是容器,可以用来装载一定的元素.

Tomcat也是容器的一种,主要用来装载web项目.

Spring也是容器的一种,其装载的是对象.

IoC?

IoC的全称为:Inversion of Control(控制反转).

这不是一种技术,只是一种设计的思想.

当我们在当前类A,调用其他类的方法时,通常是在A类中new一个B类的对象,并调用.可是当B类进行修改的时候,A类中的代码也要进行修改.就会导致耦合度过高的情况,这并不符合我们高内聚低耦合的思想.

Ioc思想是:当A类想要调用B类的时候,不是在A类中new一个B的实例,而给A类传送一个B类的实例.当B类进行修改的时候,改的只是自身内部的属性.而给A传送的是一个整体,并不会对A进行影响.

情况一:

A类中的方法new一个实例B

public class B {
    public void sayHi(){
        System.out.println("HI");
    }
}
public class A {
    //需要调用B类
    public void sayHi(){
        B b = new B();
        b.sayHi();
    }

    public static void main(String[] args) {
        A a = new A();
        a.sayHi();
    }
}

可是当情况一中的B类自身发生改变的时候,例入加入了新的属性.

A类中就要相应的发生变化,当前只是一个属性的变化,如果B类一下子更改了很多,那么A类受的影响会更大.

public class B {
    private int id;//发生变化
    public B(int id){
        this.id = id;
    }

    public void sayHi(){
        System.out.println("HI");
    }
}

public class A {
    //需要调用B类
    public void sayHi(int id){//此处需要加入参数,用来构造B
        B b = new B(id);
        b.sayHi();
    }

    public static void main(String[] args) {
        A a = new A();
        a.sayHi(10);
    }
}

情况二:

将B类的实例传送给A类调用,而不是在A类中new

public class B {
    public void sayHi(){
        System.out.println("HI");
    }
}

public class A {
    //需要调用B类
    public void sayHi(B b){
        b.sayHi();
    }

    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        a.sayHi(b);
    }
}

当B类自身发生变化的时候,A类也不会遭到影响 

public class B {
    private int id;
    public B(int id){
        this.id = id;
    }
    public void sayHi(){
        System.out.println("HI");
    }
}

public class A {
    //需要调用B类
    public static void sayHi(B b){
        b.sayHi();
    }

    public static void main(String[] args) {
        A a = new A();
        B b = new B(10);
        a.sayHi(b);
    }
}

上面两种情况很好的解释了IoC中的控制翻转:

这里的控制,其实所指的是"对实例创建的控制".

情况一下,对于B类来说,是在A类中被new出来的.B是被动的一方,A是主动的一方.B类自己并不能主导什么时候创建出实例,自己实例的创建的控制权在别人的手上

而在情况二下,B类的实例创建是自己能够控制的,在自己实例化之后再传输给A类.并不受A类的左右.主导了实例创建的控制权

这就是IoC思想,控制翻转.达到了低耦合的美好结果.

Spring的核心功能

对于上述的内容,spring的总结为:是一个IoC容器,装载着对象.

作为容器来说,最重要是功能就是存储与取出.

Spring的核心功能也正是这两个,Spring能够帮助我们存储类的对象,当我们需要使用的时候能够将所需的对象取出.

Spring也正有着创建与销毁的权利才能帮助我们完成上述的功能.

当对象放在了Spring中,就像线程池一般.方便我们取出,使用完后再存储起来,而不是重新new一个对象出来,结束后便进行销毁.

IoC与DI

DI是Dependency Inection.依赖注入,将所依赖的对象进行注入到所需的类中.是spring框架的核心之一.

可以观察,上面的情况二.我们为了达成IOC控制权翻转,是在main中创建了B类的实例再传给A.

在一个项目中,如果为了实现IOC而一次性把所需要的类都手动进行实例化一遍显然是不现实的.

而在spring中,当我们指定了一些类后.spring能够自动的在我们所需的时候,自动帮我们所创建,来达到IOC的效果,这就是DI.


http://www.niftyadmin.cn/n/5022275.html

相关文章

软件测试7大误区

随着软件测试对提高软件质量重要性的不断提高,软件测试也不断受到重视。但是,国内软件测试过程的不规范,重视开发和轻视测试的现象依旧存在。因此,对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识&#xf…

php 生成excel文件 并压缩成zip包加密

生成excel用的composer包 composer require phpoffice/phpword 0.18.0 生成zip用的composer包 composer require gemorroj/archive7z <?phpnamespace app\controller;use Archive7z\Archive7z; use http\Exception\RuntimeException; use PhpOffice\PhpSpreadsheet\IOF…

[libc-2.31 off_by_null] N0wayBack ezheap练习

以前保留了个WP&#xff0c;但是没复现过也没法用&#xff0c;用了两个晚上慢慢理复现一下。 先看这个题 while ( 1 ){menu();__isoc99_scanf("%d", &v3);switch ( v3 ){case 1:m1add(); //带readbreak;case 2:m2free();break;case 3:m3edit(); //溢出br…

蓝桥杯官网练习题(五星填数)

类似题目&#xff1a;https://blog.csdn.net/s44Sc21/article/details/132758982?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132758982%22%2C%22source%22%3A%22s44Sc21%22%7Dhttps://blog.csdn.net/s44Sc21/article/detail…

小程序中如何给会员一键拨号

一键拨号功能是一个非常实用的功能&#xff0c;商家可以快速与会员取得联系。下面&#xff0c;我们将介绍如何在小程序中实现一键拨号功能。 1. 会员绑定手机号。会员在个人中心点击设置按钮&#xff0c;在手机号码处&#xff0c;点击一键输入手机号。也可以在提交订单页面&am…

Redis 初识与入门

1. 什么是Redis Redis 是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景&#xff0c;比如 String(字符串)、…

Linux设备驱动——自动创建设备节点udev机制的实现过程

创建设备文件的机制有以下下列几种&#xff1a; mknod命令&#xff1a;手动创建设备节点的命令devfs:可以用于创建设备节点&#xff0c;创建设备节点的逻辑在内核空间&#xff08;内核2.4版本之前使用&#xff09;udev:自动创建设备节点的机制&#xff0c;创建设备节点的逻辑在…

udev自动创建设备节点的机制

流程框图如下 自动创建 1 内核检测到设备插入后&#xff0c;会发送一个uevent事件到内核中&#xff0c;并提供有关硬件设备的信息。 2 udevd守护程序收到uevent事件后&#xff0c;创建一个设备类&#xff0c;&#xff08;向上提交目录信息&#xff09;&#xff0c;会在内核中…