今天是刘小爱自学Java的第120天。
感谢你的观看,谢谢你。
image今天学习内容安排如下:
- 对ssm框架有一个了解。
- IoC控制反转的xml配置管理,这也就是spring框架的核心知识点之一。
- DI依赖注入的实现。
一、SSM框架概述
这个框架啊,估计就跟婚姻一样,也有七年之痒之说,以前呢也有一套框架叫SSH。
久而久之之后就觉得这也不好那也不好,于是就出现了一套新的框架叫SSM。
- SSM框架:SpringMVC、Spring、Mybatis
- SSH框架:Struts2、Spring、Hibernate
倒不是说SSH完全被淘汰了,但除了传统行业,基本很少用了,我们只学SSM,不学SSH。
框架的出现其实也就可以理解成为了更好地优化经典三层架构,使其更加地强大:
image①Web层
我们前面一直使用的servlet也就是Web层,直接使用servlet虽然说也行,但是会有各种各样的问题。
所以就出现了对应的web层框架:SSH中的Strutes2、SSM框架中的SpringMVC。
我们后续要学的就是SpringMVC。
②Business业务层
也就是前面一直在说的service层,反正各种各样的名称,都是指业务层 。
③EIS持久层
也就是dao层、mapper层,数据持久层,操作数据库的,无外乎就是增删改查。
前面学过的jdbc、jdbcTemplate、mybatis都是和这层是相关的,SSH框架中的hibernate,还有后续要学的SpringDateJPA都是。
而我们今天要学的spring框架也就对应着业务层:
image无论是SSM框架还是SSH框架都有Spring,足以证明其重要性。
核心点主要有三点:Ioc控制反转、AOP面向切面编程、以及事务控制。
当然spring框架体系太庞大了,涉及到的知识体系挺多的,以后会一点点学习,也就是所谓的spring全家桶。
二、Spring配置信息
我们以前Java代码是如何写的?
imageservice层和dao层都是一个接口对应一个实现类,调用时直接new一个实现类对象。
但是这样做有一个问题:
代码耦合度高,也就是说实现类如果发生了变化,要换成另一个,代码要修改。
而spring框架就能解决这个问题,其实现思路无外乎就是这么个思路:
工厂设计模式+反射 + xml配置文件
反射有一个特点:由它创建的类也好、方法也罢,亦或是属性,都是可以动态变化的。
如何动态变化,利用配置文件将类、方法名、属性字符串动态获取。
1Spring核心配置文件创建
创建步骤如下图:
image在resources中new一个XML配置文件,选择Spring Config即可。
如果是以前,需要创建一个xml文件,再去spring官网copy配置文件模板。
这是得益于idea开发工具的便利,同时也从侧面说明了spring的重要性。
mybatis框架中配置文件模板不就需要我们自己去官网copy么?
2spring配置信息说明
imagebean,豆、咖啡豆的意思。这涉及到一个Java名称由来的一件轶事:
Java创始团队中,有一名成员在爪哇岛上曾喝过一种美味的咖啡。
于是就给这门计算机编程语言命名为Java,所以Java也被叫做爪哇,就是取自爪哇岛。
其图标也就是一杯热咖啡,而Java中非常重要的对象就是这种咖啡豆,也就是bean。
而spring框架中通过<bean>标签,就可以实现对Java对象的管理。
配置完成,那它是如何使用的呢?
三、Spring IoC快速入门
IoC全称为Inverse of Control,控制反转的意思,这是一种思想,能解决代码耦合问题。
1通过spring获取对象
image①工厂设计模式
ClassPathXmlApplicationContext这一大串就是使用的工厂设计模式。
我大致说下对工厂设计模式的理解:
我们的项目是部署在服务器上面的,一般来说服务器基本是不会停的,为了用户体验需要保证一直运行。
项目运行后,我们只需要创建一次工厂对象,后续需要那个对象直接使用工厂获取。
因为服务器不停,对象就一直存在,所以如果对象用完了就需要释放资源,我们前面很多时候使用close()方法关流就是这么个道理。
而工厂对象不用释放资源,就可以一直用它。
再次强调:这一块的理解我并没有专门花时间去查资料学习,只不过随着自己不断地学习对其有了一定的见解,不一定准确,有问题后续会补充说明。
②反射
根据类的全限定名创建Class对象,再通过newInstance()实现该类的实例化。
我上述写的就是这么个实现思路,利用反射实例化对象,而参数就是由配置信息确定。
至于具体是如何确定的,需要去翻spring框架的源码,很复杂。
2依赖注入的实现
好,现在问题又来了:
spring获取对象确实解决了高耦合的问题,但是每次都要使用工厂获取对象太麻烦。
能不能只需获取一个对象,其它和这个对象相关的就自动完成获取了?
就需要使用到DI依赖注入了:
image通过property子标签,根据类中的setter方法进行依赖注入,需要使用到两个属性:
- name:即setxxx方法中的xxx。
- ref:引用哪一个对象。
依赖注入它有一个使用前提,就是被注入的对象中需要有set方法。
这样能有什么效果呢?
如果没有依赖注入的话,需要多次spring工厂获取对象;有了依赖注入的话,只需要一次获取对象,其相关的对象也就完成了初始化。
最后
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。
网友评论