java 框架_Java中最强大的框架spring

今天是刘小爱自学Java的第120天。

感谢你的观看,谢谢你。

e72e558d6dfb2db822947cee5528b2eb.png

今天学习内容安排如下:

对ssm框架有一个了解。IoC控制反转的xml配置管理,这也就是spring框架的核心知识点之一。DI依赖注入的实现。一、SSM框架概述

这个框架啊,估计就跟婚姻一样,也有七年之痒之说,以前呢也有一套框架叫SSH。

久而久之之后就觉得这也不好那也不好,于是就出现了一套新的框架叫SSM。

SSM框架:SpringMVC、Spring、MybatisSSH框架:Struts2、Spring、Hibernate倒不是说SSH完全被淘汰了,但除了传统行业,基本很少用了,我们只学SSM,不学SSH。

框架的出现其实也就可以理解成为了更好地优化经典三层架构,使其更加地强大:

43430a7c2e2fa6592de3c64aa820c5e7.png

①Web层

我们前面一直使用的servlet也就是Web层,直接使用servlet虽然说也行,但是会有各种各样的问题。

所以就出现了对应的web层框架:SSH中的Strutes2、SSM框架中的SpringMVC。

我们后续要学的就是SpringMVC。

②Business业务层

也就是前面一直在说的service层,反正各种各样的名称,都是指业务层 。

③EIS持久层

也就是dao层、mapper层,数据持久层,操作数据库的,无外乎就是增删改查。

前面学过的jdbc、jdbcTemplate、mybatis都是和这层是相关的,SSH框架中的hibernate,还有后续要学的SpringDateJPA都是。

而我们今天要学的spring框架也就对应着业务层:

c987280fe490b3787cbeed0d5cad25fe.png

无论是SSM框架还是SSH框架都有Spring,足以证明其重要性。

核心点主要有三点:Ioc控制反转、AOP面向切面编程、以及事务控制。

当然spring框架体系太庞大了,涉及到的知识体系挺多的,以后会一点点学习,也就是所谓的spring全家桶。

二、Spring配置信息

我们以前Java代码是如何写的?

17fea83c54e47ac4d37c12e24f7156f7.png

service层和dao层都是一个接口对应一个实现类,调用时直接new一个实现类对象。

但是这样做有一个问题:

代码耦合度高,也就是说实现类如果发生了变化,要换成另一个,代码要修改。

而spring框架就能解决这个问题,其实现思路无外乎就是这么个思路:

工厂设计模式+反射 + xml配置文件

反射有一个特点:由它创建的类也好、方法也罢,亦或是属性,都是可以动态变化的。

如何动态变化,利用配置文件将类、方法名、属性字符串动态获取。

1Spring核心配置文件创建

创建步骤如下图:

9986cf087194b33f7da0a5504f7a4354.png

在resources中new一个XML配置文件,选择Spring Config即可。

如果是以前,需要创建一个xml文件,再去spring官网copy配置文件模板。

这是得益于idea开发工具的便利,同时也从侧面说明了spring的重要性。

mybatis框架中配置文件模板不就需要我们自己去官网copy么?

2spring配置信息说明

40cb50b52be238545265411c7ed9e316.png

bean,豆、咖啡豆的意思。这涉及到一个Java名称由来的一件轶事:

Java创始团队中,有一名成员在爪哇岛上曾喝过一种美味的咖啡。

于是就给这门计算机编程语言命名为Java,所以Java也被叫做爪哇,就是取自爪哇岛。

其图标也就是一杯热咖啡,而Java中非常重要的对象就是这种咖啡豆,也就是bean。

而spring框架中通过标签,就可以实现对Java对象的管理。

配置完成,那它是如何使用的呢?

三、Spring IoC快速入门

IoC全称为Inverse of Control,控制反转的意思,这是一种思想,能解决代码耦合问题。

1通过spring获取对象

467e9d75a439bf1f6155b7f29b83de04.png

①工厂设计模式

ClassPathXmlApplicationContext这一大串就是使用的工厂设计模式。

我大致说下对工厂设计模式的理解:

我们的项目是部署在服务器上面的,一般来说服务器基本是不会停的,为了用户体验需要保证一直运行。

项目运行后,我们只需要创建一次工厂对象,后续需要那个对象直接使用工厂获取。

因为服务器不停,对象就一直存在,所以如果对象用完了就需要释放资源,我们前面很多时候使用close()方法关流就是这么个道理。

而工厂对象不用释放资源,就可以一直用它。

再次强调:这一块的理解我并没有专门花时间去查资料学习,只不过随着自己不断地学习对其有了一定的见解,不一定准确,有问题后续会补充说明。

②反射

根据类的全限定名创建Class对象,再通过newInstance()实现该类的实例化。

我上述写的就是这么个实现思路,利用反射实例化对象,而参数就是由配置信息确定。

至于具体是如何确定的,需要去翻spring框架的源码,很复杂。

2依赖注入的实现

好,现在问题又来了:

spring获取对象确实解决了高耦合的问题,但是每次都要使用工厂获取对象太麻烦。

能不能只需获取一个对象,其它和这个对象相关的就自动完成获取了?

就需要使用到DI依赖注入了:

8f37272bf9f7649e2965ab333918d110.png

通过property子标签,根据类中的setter方法进行依赖注入,需要使用到两个属性:

name:即setxxx方法中的xxx。ref:引用哪一个对象。依赖注入它有一个使用前提,就是被注入的对象中需要有set方法。

这样能有什么效果呢?

如果没有依赖注入的话,需要多次spring工厂获取对象;有了依赖注入的话,只需要一次获取对象,其相关的对象也就完成了初始化。

最后

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值