当前位置: 首页 > news >正文

Spring初识

未来的几周时间,大概率我会更新一下Spring家族的一些简单知识。而什么是Spring家族,好多同学还不是很清楚,我先来简单介绍一下吧:

所谓Spring家族,它其实就是一个框架,是基于Servlet再次进行封装的内容。为啥说是再次进行封装呢,就是因为Servlet也是封装的一门用于Web端的技术,他们的基础都是Java。所以说,想要学习Spring,建议大家先去了解一下Java基础语法以及Servlet技术。

Spring是什么

通常意义下,我们所说的Spring就是Spring Framework,这是一个开源框架,有着活跃而庞大的社区。为啥说Java的生态很完善,我认为Spring家族就提供了许多保证生态完善的轮子。而Spring框架由于支持广泛的应用场景,使得Java企业级的应用开发变得更简单。

框架为会啥流行呢?或者换句话说,为啥Spring会有这么庞大的用户量?刚开始使用Java解决某一问题时,代码冗杂而功能不全,而使用一些工具方法就可以使得本来繁杂的代码变得简单,而积聚了众多工具方法的组合,就可以称之为框架,既然有了可以使代码变简单的办法,那么就一定会被更多人所用,自然而然也会流行起来。

用一句话来概括Spring框架:Spring是包含了众多工具方法的IoC容器。

IoC是什么

IoC的全称是Inverson of Control,译为中文就是控制反转。其内容就是对对象的生命周期进行控制反转,结果就是降低耦合。

举个简单的例子来说吧:在传统开发中,A类引用B类,B类引用C类,C类引用D类,因此在A类中需要new一个B类,B类中需要new一个C类,而C类中需要new一个D类,假如D类的构造方法发生了改变,那么随之而来的就是需要去改变ABC三个类的构造方法;但是在Spring开发中,不需要进行new类,而是直接把需要使用类的对象给传进来,这样当D类发生改变时,并不需要去动其他的类,从而减少了许多不必要的麻烦,降低了类与类之间的耦合度。

DI是什么

DI的全称是Dependency Injection,译为中文就是依赖注入。其内容就是IoC容器在运行期间,动态的将某种依赖关系注入到对象当中。

从客观角度来看,IoC和DI描述的都是同一件事,即通过IoC容器,动态的将某种依赖关系注入到对象当中。不同的则是,IoC是一种思想,是从整体层面解释的概念,而DI则表示的是一种技术,用这种依赖注入的技术来控制对象生命周期的反转。

容器是什么

顾名思义,容器就是用来存放物品的一种装置。在Spring中,容器就是用来存放对象的装置。既然是容器,那么就表明其可以放物品,也可以拿物品。因此学习Spring时最核心的就是学会如何将对象存储到Spring中,如何将对象从Spring中取出来。

明白了Spring核心功能,那么它的好处是啥呢?首先将对象存储到IoC容器中就表示将未来所有可能用到的工具都放入仓库中,啥时候用啥时候取就可以了,而用完再放入容器中即可,非常的简单便捷。而传统的开发中new就相当于每次使用工具的时候,都现场制作一把,然后用完以后,直接废弃,下次再用的时候再制作,非常麻烦,这就是Spring开发和传统开发的区别。

Spring的创建和存取

1. 创建

创建一个maven项目

f7c494baea5b4eacadc044eb2f629070.png

引入Spring-beans(管理对象的模块)和Spring-context(Spring上下文)依赖

    <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.3.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.3.RELEASE</version></dependency></dependencies>

2. 存取

a. 创建一个Bean对象

所谓的Bean对象其实就是Java语言中的一个普通对象。

package org.example;public class User {public String sayHi() {return "hello world";}
}

b. 添加配置文件

在resourse目录添加配置文件spring-config.xml(后缀是xml不可变,但是前缀是可以改变的);xml文件的作用就是告诉Spring框架要存取的对象是啥。

0456ad4d28bb4cc9abb32848d0ba33b0.png

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"></beans>

c. 存对象

将Bean对象配置到xml文件中。

<bean id="user" class="org.example.User"></bean>
<!--id表示的是Bean对象的名称,不可重复;而class表示的是对象本身,即包名+类名-->

d. 取对象

读对象的话先要得到Spring对象,再从Spring对象中取Bean对象;获取Spring对象可以使用ApplicationContext。

package org.example;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main(String[] args) {//1. 先得到Spring对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");//2. 从Spring对象中得到Bean对象User user = context.getBean("user", User.class);//3. 使用Bean对象System.out.println(user.sayHi());}
}

对于得到Spring对象来说,有两种方法可以得到。

一种就是使用ApplicationContext,另一种方法就是BeanFactory。

package org.example;import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;public class App {public static void main(String[] args) {//1. 先得到Spring对象BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));//2. 从Spring对象中取到Bean对象User user = context.getBean("user", User.class);//3. 使用Bean对象System.out.println(user.sayHi());}}

ApplicationContext和BeanFactory的异同

相同点:

两者都可以得到Spring对象;

两者都是来自Spring的顶级接口(即可以有很多类来继承他们)。

不同点:
07277c3f138341d6ada49a37da195fb0.png

cdef00e2ab794f6eab39b368c3d94ef5.png

继承关系,从上图可以看出,ApplicationContext是继承了BeanFactory,也就是说ApplicationContext不仅拥有BeanFactory的基础功能,还在其功能之上加了些许其他功能,例如国际化支持、资源访问以及事件传播等,而BeanFactory则只有最基础访问Bean的能力。

性能,ApplicationContext是一次性加载,即程序运行的时候将Bean对象都给加载出来,因此后续访问Bean的时候就会很快,而BeanFactory则是在使用某个对象的时候才进行加载,所有在执行Bean获取的时候会比较慢。

Spring中取对象的三种方法

        //第一种方法,使用Bean名称进行获取//当xml中没有出现这个Bean名称时,依然进行强转,那么可能会出现错误User user1 = (User) context.getBean("user");//第二种方法,使用Bean类型来获取//当xml中出现两次及以上,即一个Bean对象但是有好几个名字时,也会报错User user2 = context.getBean(User.class);//第三种方法,使用Bean名称和类型来获取User user3 = context.getBean("user", User.class);

总结

了解了Spring是包含了众多工具方法的IoC容器;

了解了IoC、DI以及容器的思想;

了解了Spring的创建和存取。

上述已经实现了Spring的存取,但是实现方法还是比较复杂,接下来会写一篇关于Spring存取更简单的方式,其中涉及到的内容也比较多,例如有配置文件、五大注解、Bean注解以及三大注入等内容。

http://www.lryc.cn/news/235075.html

相关文章:

  • 2023全新付费进群系统源码 带定位完整版 附教程
  • C# LINQ使用介绍
  • 【c++】——类和对象(中)——实现完整的日期类(优化)万字详细解疑答惑
  • 开源与闭源:大模型时代的技术交融与商业平衡
  • C#开发的OpenRA游戏之属性BodyOrientation(6)
  • Linux shell编程学习笔记27:tputs
  • 【计算机网络笔记】IPv6简介
  • c语言-数据结构-堆
  • ROS基础—关于参数服务器的操作
  • Sql Server 2017主从配置之:事务日志传送
  • 每日OJ题_算法_双指针_力扣283. 移动零+力扣1089. 复写零
  • WebGl-Blender:建模 / 想象成形 / Blender概念词汇表 / 快捷键
  • 【C++】【Opencv】cv::warpAffine()仿射变换函数详解,实现平移、缩放和旋转等功能
  • WPF实现右键菜单
  • Java智慧工地SaaS管理平台源码:AI/云计算/物联网
  • 【漏洞复现】通达oa 前台sql注入
  • 机器学习笔记 - Ocr识别中的文本检测EAST网络概述
  • 【SQL server】数据库、数据表的创建
  • vue的生命周期分别是什么?
  • Java拼图游戏
  • Vue框架的element组件table文字居中
  • 科技创新 共铸典范 | 江西卫健办邓敏、飞图影像董事长洪诗诗一行到访拓世科技集团,提振公共卫生事业发展
  • Linux安装OpenCV并配置VSCode环境
  • Django(ORM事务操作|ORM常见字段类型|ORM常见字段参数|关系字段|Meta元信息)
  • 【mujoco】Ubuntu20.04配置mujoco210
  • 【洛谷 P3853】[TJOI2007] 路标设置 题解(二分答案+循环)
  • 蓝桥杯 vector
  • ai绘画部署教程
  • 策略模式的应用——应对频繁的需求变更
  • qt-C++笔记之treeWidget初次使用