Spring学习|Spring简介、IOC控制反转理解、IOC创建对象方式

news2024/12/25 14:02:29

Spring

Spring:春天------>给软件行业带来了春天!
2002,首次推出了Spring框架的雏形: interface21框架!
Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日发布了1.0正式版。
RodJohnson,Spring Framework创始人,著名作者。很难想象RodJohnson的学历,真的让好多人大吃惊,他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。
spring理念:使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架!

优点

Spring是一个开源的免费的框架(容器)!
Spring是一个轻量级的、非入侵式的框架!
控制反转 (IOC),面向切面编程 (AOP) !
支持事务的处理,对框架整合的支持!
总结一句话: Spring就是一个轻量级的控制反转 (IOC)和面向切面编程 (AOP)的框架!

运用Spring首先需要导入依赖,spring-webmvc,为了后面整合Mybatis,需要导入spring-jdbc依赖

理解IOC原型的小demo

创建一个空的maven父工程,删除src目录,导入spring-webmvc依赖

编写一个DAO层接口,并定义一个获得用户的方法

编写一个接口实现类,实现接口,并重写方法,定义该方法的具体实现内容

编写一个Service层接口,并定义获得用户的方法

编写该Service接口的实现类,重写该方法,该方法实际操作就是导入刚才的DAO层实现类,并用该类执行对应的方法

客户端这边直接创建一个刚才编写的Service层的实现类,并调用该实现类的相应方法即可,该方法实际上就是执行了,自己导入的对应的DAO层实现类所执行的方法

如果说,我们需求增加,又新创建了一个DAO层接口的实现类,执行的内容不一样

那我们客户端如果想执行这个方法的话,那么就需要在Service实现类中,去将创建的DAO层实现类给更改为这个新的实现类(需要更改源代码)

然后客户端这边新建Service层的实现类后,调方法,执行的才会是新的DAO层实现类所执行的操作

上面的操作需要更改源代码,如果程序复杂的话,那我们需要更改很多源代码,非常不舒服,我们在Service层的实现类中,由之前主动创建一个对应的DAO层接口实现类,改为设一个set方法来让用户在客户端直接动态的注入所想执行的DAO层接口实现类,执行自己需要的方法。

比如,在客户端这边,用户想要执行MysqlImpl这个DAO层接口实现类所执行的方法,那么直接在新建一个Service层实现类后,通过我们之前的set方法,动态注入我们所需要的DAO层接口实现类即可。

用户想执行别的DAO层实现类所执行的操作,直接在set中更改对应的接口实现类即可,这种方式可以让我们不必更改后面的源代码,只专注于业务即可。

小结

在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原代码!如果程序代码量十分大,修改一次的成本代价十分昂贵!
我们使用一个Set接口实现.已经发生了革命性的变化!

之前,程序是主动创建对象!控制权在程序猿手上!
使用了set注入后,程序不再具有主动性,而是变成了被动的接受对象!
这种思想,从本质上解决了问题,我们程序猿不用再去管理对象的创建了。系统的耦合性大大降低~,可以更加专注的在业务的实现上!这是IOC的原型!

IOC本质

控制反转loC(lnversion of Control),是一种设计思想,DI(依赖注入)是实现loC的一种方法,也有人认为DI只是loC的另一种说法。没有loC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是loC容器,其实现方法是依赖注入 (DependencyInjection,DI)。

理解IOC的demo,HelloSpring

编写一个实体类Hello,并设置一个str属性,设置对应的get/set方法

IOC需要在resources目录下创建一个xml的配置文件,用来创建、管理bean(实体类),名字可以随意,不过正规是applicationContext.xml

我们将刚才自己写的Hello实体类,设置在其中,id代表实体类对象的名字,class代表对应的实体类,property和value,可以根据实体类中的set方法,设置生成对象的属性值,这里就相当于spring容器帮我们创建了一个属性str值为Spring的hello对象。

编写测试类,先获得context对象,然后根据id对象名用getBean方法,获得由spring容器创建好的hello对象

思考问题 

Hello 对象是谁创建的 ?
hello 对象是由Spring创建的
Hello 对象的属性是怎么设置的 ?
hello 对象的属性是由Spring容器设置的
这个过程就叫控制反转:
控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的.
反转:程序本身不创建对象,而变成被动的接收对象
依赖注入:就是利用set方法来进行注入的
IOC是一种编程思想,由主动的编程变成被动的接收

OK,到了现在,我们彻底不用在程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改,所谓的loC,一句话搞定 : 对象由Spring 来创建,管理,装配!

我们把Hello类中的set方法删除

我们可以看到bean.xml中的str爆红,因为没有set方法供其来赋值,注入值

我们将第一demo,中不同的DAO层接口实现类在bean.xml中配置,并且将Service层的接口实现类配置,并且,将其属性userDao,用ref赋值为用户需要的DAO层接口实现类

之前在客户端,还需要手动创建Service层接口实现类,并且通过set方法来穿我们需要的DAO层接口实现类,让Service层接口实现类执行相应的DAO层接口实现类的方法。

如今,我们只需要获得context上下文对象,然后用getBean方法,根据id名获取Service层接口实现类,其具体的要实现哪个DAO层的接口实现类,在bean.xml中已经配好,直接执行就行了,刚赋值的是mysqlImpl,故执行的是这个DAO层接口实现类的方法

想要更换别的DAO层接口实现类的方法,那只需在bean.xml中,在创建Service层接口实现类对象时,将其属性userDao用ref赋值为我们需要的DAO层接口实现类即可。

客户端代码不变,再次执行,就可执行更改后的DAO层接口实现类所执行的方法,可以看到用户不需要再去更改程序的代码,只需要在bean.xml中修改相应的配置即可。

IOC创建对象方式

我们定义一个实体类,有一个无参构造器

在bean.xml中配置这个实体类

在客户端获得context对象,然后getBean方法得到这个user对象,可以发现spring容器走的是无参构造器创建的这个对象

有参构造器创建

给该实体类只设置一个有参构造器

第一种下标赋值

在bean.xml中配置该实体类,参数根据参数的下标来对应赋值

第二种,根据参数类型赋值(不建议)

第三种,直接根据参数名赋值

我们再创建一个额外的实体类,并设置无参构造器

将其在bean.xml种配置

我们在客户端再获得context对象,然后getBean获得第一个实体类的对象,我们发现我们新设置的这个实体类对象也依然通过其自己的无参构造器被创建了

总结:

故我们可以知道,我们配置的实体类在配置文件加载的时候,容器中管理的对象就已经初始化了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/974990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于某次授权的大型内网渗透测试

背景: 接到朋友邀请,要进行一个授权站点的渗透,但是进去实际环境才发现是多域控主机。也学习了很多后渗透手法,比较受益匪浅。 前期渗透: 打点:(任意文件上传) 直接发现头像处任…

目录与文件系统

无论在哪个计算机系统中,文件系统结构都应该是一样的一层或者几层的话太多太乱不适用用目录实现一个树状结构,划分后层次清晰如果把目录下所有的文件的FCB都存取,然后对比没必要太麻烦了 所以数据盘块集合中存放目录下文件字符串和对应的编号…

Rocky(Centos)安装中文字体(防止中文乱码)

1、查看字体列表 运行下列命令 fc-list 若出现,下面截图,则需要安装字体管理软件 安装字体库,运行: yum -y install fontconfig 当看到下图的提示信息时说明已安装成功: 二、添加中文字体 1)window…

文件夹怎么安全加密?文件夹加密软件怎么样?

我们在使用电脑的过程中,习惯用文件夹来管理电脑数据,为了文件夹数据安全,我们需要使用加密的方式来进行保护。那么,文件夹该怎么安全加密呢?下面我们就来了解一下。 文件夹加密软件安全吗? 文件夹加密软…

功率放大器主要作用是什么呢

功率放大器是一种电子设备,主要作用是将输入信号的功率增加到更高的水平,以便能够驱动高功率负载。在许多应用中,信号源产生的信号往往具有较低的功率,无法直接满足一些要求较高的设备或系统的需求。而功率放大器则可以增强信号的…

当面试被问到 Java 内存模型,不妨反问面试官:您问得是 Java Memory Model 呢?还是 JVM 运行时数据区?

目录 1. JVM 运行时数据区 2. Java 内存模型 最近在牛客上看到这样一个帖子,大概就是在面试中呢,被面试官问到了 Java 内存模型,面试的这位小伙呢,也是掌握了 JVM 内存布局的相关知识,但是不知道面试官问的 Java 内存…

行测图形推理规律(一)元素组成

题库:粉笔网题库 (fenbi.com) 不知道和测评的行测题库是不是一样的,但是总结的规律应该是一样的。 规律并不唯一,题库的答案也只是参考答案,切勿当杠精,你觉得你的规律更合适就别管。本人所归纳的规律仅代表本人想法…

淘宝数据库,主键如何设计的?

聊一个实际问题:淘宝的数据库,主键是如何设计的? 某些错的离谱的答案还在网上年复一年的流传着,甚至还成为了所谓的 MySQL 军规。其中,一个最明显的错误就是关于MySQL 的主键设计。 大部分人的回答如此自信&#xff…

uni-app点击复制指定内容(点击复制)

官方api uni.setClipboardData(OBJECT) uni.setClipboardData({data: 要被复制的内容,success: function () {console.log(success);} });

虹科分享 | MKA:基于先进车载网络安全解决方案的密钥协议

MKA作为MACsec的密钥协议,具有安全、高效、针对性强的特点,为您的汽车ECU通讯创建了一个安全的通信平台,可以助力您的各种汽车创新项目! 虹科方案 | 什么是基于MACsec的汽车MKA 一、MACsec在汽车行业的应用 在以往的文章中&#…

AutoSAR-BSW层概述

一.什么是BSW BSW层全称为Basic Software (基础软件层),顾名思义,该层主要是为应用层提供基础服务。 这里可以看到 BSW 主要提供了:看门狗服务 ,存储服务,通信和诊断服务,OS服务&a…

select 语句执行顺序

sql 样例 select t_students.name as 姓名, sum(case when b.cname语文 then c.sc_val else 0 end) As 语文 ,sum(case when b.cname数学 then c.sc_val else 0 end) As 数学,sum(case when b.cname英语 then c.sc_val else 0 end) As 英语, From t_students a, t_corses b, t…

MIT6.S081实验环境搭建

MIT6.S081 lab 环境搭建 本文参考了MIT的官方指南和知乎文章环境搭建 step1 首先需要一个ubuntu20.04的系统,我使用的是vscode的WSL2连接的ubuntu20.04,使用virtual box建一个ubuntu20.04的虚拟机应该也可以。 可以用 lsb_release -a 查看一下自己ub…

微信小程序开发:一种新型的移动应用程序开发方式

一、引言 随着移动互联网的快速发展,微信小程序作为一种新型的移动应用开发方式,正在受到越来越多的关注。微信小程序是一种基于微信平台的轻量化应用,开发者可以通过微信提供的开发工具和接口,开发出各种具有特定功能的应用程序…

深度解析浏览器工作原理与v8引擎

1.浏览器中js如和被执行的 当我们输入一个域名时会经历dns解析变成一个ip地址,然后浏览器会通过这个ip地址去访问服务器,服务器会放回一个index.html页面,浏览器开始解析这个inde.html文件,当解析到link标签时就开始下载对应的css…

非科班菜鸡算法学习记录 | 代码随想录算法训练营第56天|| 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇

583. 两个字符串的删除操作583. Delete Operation for Two Strings 知识点:动规 状态:看思路自己写 思路: dpij为到i-1和j-1为止的最小操作次数,需要初始化; dp[i][0] 表示i-1要想变成和-1一样的删除次数&#xff0c…

基于CycleGAN的山水风格画迁移

基于CycleGAN的山水风格画迁移 1、简介 1.1 研究背景及意义 绘画是人类重要的一种艺术形式,其中中国的山水画源远流长,具有丰富的美学内涵,沉淀着中国人的情思。游山玩水的大陆文化意识,以山为德、水为性的内在修为意识&#x…

几分钟创建自己的助理

链接: Droxy 上传pdf或者mp4.要求如下: 仅支持PDF或MP4文件。 一次最多可以上传5个文件。 总文件大小应小于1000MB。 视频时长应少于120分钟。 开始使用:

seata1.4.2版本配置总结

文章目录 环境准备:seata-server配置registry.conf创建数据库表 nacos配置client配置seata_orderseata_storageseata_account 注意点 创建项目seata-order-service2001pom.xml文件application.yml 实体类CommonResultOrder DaoOrderDaoOrderMapper.xml config配置类…

华为Mate 60Pro“一机难求”,预计一年出货1200万部,花粉狂欢

根据天风国际分析师郭明錤的报告显示,华为Mate 60 Pro自8月29日上市以来,需求一直保持强劲势头,并且预计下半年出货量将提高约20%,达到550-600万部。与旧款机型相比,华为Mate 60 Pro的需求明显更加强劲。 例如&#xf…