我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring的创建和使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring的创建和使用

目录

1.什么是Spring

IoC

2.Spring创建和使用

创建Spring

存取Bean

BeanFactory 和 ApplicationContext的区别

3. 总结


 

1.什么是Spring

spring官网:spring.io

aaf7108dbc794eb7b9c8108d7fc1a8b6.png

它的生态是非常完善的

b1f46fb3f9a94feb9e11b64919e4709c.png

通常所说的Spring指的是Spring Framework(Spring 框架),是一个开源的框架,支持广泛的应用场景可以使Java企业级应用程序开发更简单

Spring Framework 是Spring生态圈中最基础的项目,是其他项目的根基

核心:Spring是包含了众多工具方法的IoC容器

那么什么是IoC容器?

容器:之前学过的List/Map=>数据存储容器,tomcat=>web容器..等都是容器

Spring=>IoC容器

IoC

IoC:Inversion of Control 控制反转,Spring是一个控制反转容器

那IoC具体是什么呢?

这得从我们Java代码的书写现状说起,在传统编程时, 对象之间的耦合度是偏高的

我们写个示例,Test类要依靠A类才能完成任务,A依赖于B才能完成任务

2bc5bc983f51461484b9be05ab0cfaad.png

创建A类 

A对象是依赖于B对象的,所以会报错

cd7eb514127b42f1860addeb66317509.png

加上B类

a9b5ecfc2ba2423b8ccd33e2dfa0eb58.png

此时A类不再报错

cdfe3f2a655942bba8df47392d081f46.png

也就是A对象要使用B对象时,得new一个B对象.此时,A对象掌握了B对象的控制权,党部在使用时,可以给B设置为null,就被回收了

A依赖于B,那么当B对象的构造方法改动时,A对象也得跟着改动

当B中的构造方法改动后,newB的A也得改动,否则就会报错

243c4063ee0f43b88075d6ab454b0506.png

2664776773ec43daa76d52371dba0f0e.png

改动后

af9d27b6c38d44db96b621d342f75298.png

 newA的Test也需要改动

6c00c76796864da68dbaae51db3eda9e.png

 1c37dca797364bedb296761ee8668dff.png

可以发现,当最底层发生变化时,整个调用链都需要发生变化

这就体现了代码之间耦合程度比较高的问题,如何解决呢?

我们写一种解耦的写法

cd7a6dce9e5a4c9499f8bb293b2550ca.png

c507ef5a77e84fc894273820cadb433f.png

0d673308bae24720a65a36311f2009b1.png

6961167172ab49df82077b855686c98d.png

831666105aef4cdd8f8372864f0a7960.png

此时我们改动B的构造器

9e77b063d2c34f18ba4a1fa33435ebfb.png

前面几个类都不会报错,只是提供它的测试类报错了

e5c16bd8b06947869e0295683f462528.png

fbc0d7945e014abe8d6e928d22d01bca.png

这种方法就实现了解耦

传统方式:Test依赖A,A依赖B

解耦方式:B传入A,A传入Test

是一个反转的过程

这些类的生命周期,不是由依赖的类来控制了

总结:

解决办法:解耦,使用对象时,不主动new对象,转为由外部获取

即使下级类参数发生改动,当前类本身也不需要改动,这就是程序的解耦

IoC负责对象的创建,初始化一系列工作,被创建或被管理的对象在IoC容器中统称为Bean

IoC核心思想:对象的创建控制权由程序转移到外部,这种思想称为控制反转

A只管使用B对象,不进行new对象操作,只是使用.B对象由谁创建A并不关心

此时,A对象就没有B对象的控制权了.控制权交出去了,这就是控制反转!

回到Spring这个主题,它是包含了众多方法工具的IoC容器,也就是Spring提供了一个IoC容器,用来充当IoC思想中的"外部",它具有对象创建和销毁的权利,本身又具备存储对象和获取对象的能力

核心功能:将对象存入到容器,将对象从容器中取出

用Spring存取对象的好处?

将对象放到容器中,相当于将以后可能用的工具都制作好放到仓库了.需要时直接取出使用,用完再放回仓库,new对象方式使用完置空就会被回收,要使用还得重新new.

还需要提到一个概念,Dependency Injection,简称DI,是依赖注入的意思

依赖注入:IoC容器运行期间,动态的将某种依赖关系注入到对象中.

可以看出,IoC是一个指导思想,DI是其具体的实现

2.Spring创建和使用

创建Spring

创建Spring项目分为三步

创建一个普通Maven项目

添加Spring框架支持

添加启动类

创建一个普通Maven项目

2311e0d947574751bb5235af59610a90.png

这样就代表项目已经初始化完成了

deafcf8830184bcabbc39ce10661901a.png

添加Spring依赖

需要配置好国内源,否则下载非常慢

8b1ed909a5fe42ccacf8de9ed02a246c.png

需要使用大版本号是5的支持和jdk要相匹配 

43cafd5364b5400fb62120a2c83fc6a6.png

    org.springframework    spring-context    5.3.26

然后点击刷新

0ccc2332b8e5413195487c86ca654f17.png 添加依赖成功

7d96b6c924f8473db6cbabad8a477ea1.png

创建启动类

8239a5633ddd4ea8b199560906ed9e73.png

下来我们将Bean对象存储到Spring中

存取Bean

创建Bean

Bean:在Java中如果被使用很多次,就称为Bean

090231e3449545f3a6875216ecdda1c3.png

将Bean存储到Spring容器中

通过Spring的配置文件配置Bean的信息 

dd8b4821139f4c89a79ebb6bbc2e75f1.png

e5a11bec756b4734a2095d08dff632a4.png

从Spring中获取到Bean

 先获取Spring(上下文)对象,用到的是ClassPathXmlApplicationContext

ba81ab7b39674ce89091460d9e146a82.png

 ClassPathXmlApplicationContext类是实现了ApplicationContext接口的

eebb7e86aae34c4d975fd788dd87501a.png

ClassPathXmlApplicationContext属于 ApplicationContext 的⼦类,拥有 ApplicationContext 的所有功能,是通过 xml 的配置来获取所有的 Bean 容器的

注意""中的路径一定要写对,和resourses下的.xml文件对应,不然无法找到我们设置的bean

然后就能获取bean了

fe27ed714a91431ab064901217740a1d.png

82c63474b3e64941bb4e34555cdee40d.png

这个参数内容必须是和.xml中配置的id是一样的才能获取到bean

e85be45238f645d89d1446c4b8318e06.png

 结果:

3c69c8c7a3b0414796e19f231ecbb5e5.png

没有通过new对象的方式,获取到了bean对象并且使用

还有另外两种获取方式:

cb4b19bfa9e7409ebcf3025ff43c9f9d.png

06350590aa5743518b19a7e3ee2eab34.png

83ea9e78b1d04c77a44eb90a7c7c85dd.png

这个过程就是通过代码实现的DI, 动态的将依赖关系注入到对象中!

 BeanFactory也能获取到Spring的上下文

可以看出,Application Context也是它的子类型,是对其功能的扩展

public class Application2 {    public static void main(String[] args) {        //1.得到spring上下文对象        BeanFactory beanFactory =                //不推荐使用,是因为早期时内存珍贵,现在内存价格低廉.                //特征:省内存,调用时加载初始化bean到spring容器,效率不高!                new XmlBeanFactory(new ClassPathResource("spring-config.xml"));        //2.从容器中获取对象        //第一种获取方式:这个写法是有问题的,如果本身是"null",强转会出错        Student s2 = (Student) beanFactory.getBean("student");        //3.使用对象        s2.sayHi();    }}

 e4c3fb0f50b94940b0ae3bb5d42cf347.png

BeanFactory 和 ApplicationContext的区别

那么这两种方式又什么区别呢?

我们再创建一个类

842fa65396ac4c3687b411afb032bdd9.png

配置Bean信息

25e47754fd904488b717ec17cbfd7fdf.png

 我们只调用获取上下文的这行代码

bef6dba3f6e440c4a79e5f81909a0254.png 我们可以发现:

ApplicationContext是一次性加载,比较费内存,但是后续读取非常快,会将spring中所有的bean进行初始化,全部实例化到spring中!!饿汉模式

Beanfactory不会,使用的是惰性加载,只有执行到了get bean才会加载对应的bean!!!

从继承关系方面来说:

910279f864cf4fd0af8063bae6bf8d4f.png

Spring有两个顶级接口,BeanFactory 和 ApplicationContext,其中BeanFactory提供了基础的访问容器的能力,而ApplicationContext属于BeanFactory的子类,除了继承了BeanFactory之外,还拥有其他特性,添加了对国际化支持,资源访问支持,以及事件传播等方面的支持

3. 总结

创建Spring项目

创建一个Maven项目

添加Spring-context依赖

创建启动类

存储Bean

创建Bean对象

通过Spring配置文件(spring-config.xml)

 3.读取Bean

得到Spring上下文(BeanFactory 和 ApplicationContext)

通过Spring对象.getBean()方法获取到Bean对象(这个过程是DI)

使用Bean

 

 

 

 

 

 

 

 

 

 

来源地址:https://blog.csdn.net/chenchenchencl/article/details/130122083

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring的创建和使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用 Spring 3 来创建 REST

原文出处:http://www.ibm.com/developerworks/cn/web/wa-spring3webserv/index.html在 Java 中,您可以使用以下几种方法来创建 RESTful Web Service:使用
2023-01-31

一文掌握Spring的创建与使用

这篇文章详细介绍了spring的创建与使用,文章中有详细的代码示例和图片介绍,对学习有一定的而参考价值,需要的同学可以参考一下
2023-05-16

如何使用IDEA2022.1 创建Spring Boot项目

这篇文章主要介绍了如何使用IDEA2022.1 创建Spring Boot项目,大家在使用idea开发工具时发现给以往的版本略微的不同,细心的小编在此记录下,需要的朋友可以参考下
2022-11-13

Spring Boot如何创建和运行

这篇文章主要讲解了“Spring Boot如何创建和运行”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot如何创建和运行”吧!1. 初始 Spring Boot1.1 什么
2023-07-02

怎么利用Spring Boot和JPA创建GraphQL API

本篇内容主要讲解“怎么利用Spring Boot和JPA创建GraphQL API”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么利用Spring Boot和JPA创建GraphQL API”
2023-06-30

Spring创建bean的几种方式及使用场景

本文主要介绍了Spring创建bean的几种方式及使用场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-18

behaviors如何创建和使用

这篇文章主要讲解了“behaviors如何创建和使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“behaviors如何创建和使用”吧!什么是 behaviorsbehaviors 是小程序
2023-06-29

Java之SpringBoot创建和使用

Spring的诞生就是为了简化Java程序的开发的.SpringBoot的诞生就是为了简化Spring程序开发的,对Springboot感兴趣的同学可以借鉴本文
2023-05-14

Spring使用注解方式实现创建对象

这篇文章主要介绍了Spring使用注解方式实现创建对象,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2023-02-06

SQL语句之表的创建和使用

表 一、表的创建(DDL)1.建表的语法格式创建一个学生表 2.mysql中的数据类型3.删除表 二、在表中插入数据insert(DML)1.insert2.insert插入日期3.date和datetime区别 三、
2023-08-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录