前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【框架】120:spring框架初体验

【框架】120:spring框架初体验

作者头像
刘小爱
发布2020-08-17 10:12:15
8370
发布2020-08-17 10:12:15
举报
文章被收录于专栏:零基础自学Java零基础自学Java

今天学习内容安排如下:

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

一、SSM框架概述

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

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

  • SSM框架:SpringMVC、Spring、Mybatis
  • SSH框架:Struts2、Spring、Hibernate

倒不是说SSH完全被淘汰了,但除了传统行业,基本很少用了,我们只学SSM,不学SSH。

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

①Web层

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

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

我们后续要学的就是SpringMVC。

②Business业务层

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

③EIS持久层

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

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

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

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

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

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

二、Spring配置信息

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

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

但是这样做有一个问题:

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

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

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

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

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

1Spring核心配置文件创建

创建步骤如下图:

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

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

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

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

2spring配置信息说明

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

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

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

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

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

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

三、Spring IoC快速入门

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

1通过spring获取对象

①工厂设计模式

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

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

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

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

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

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

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

②反射

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

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

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

2依赖注入的实现

好,现在问题又来了:

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

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

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

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

  • name:即setxxx方法中的xxx。
  • ref:引用哪一个对象。

依赖注入它有一个使用前提,就是被注入的对象中需要有set方法。

这样能有什么效果呢?

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

最后

谢谢你的观看。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘小爱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、SSM框架概述
  • 二、Spring配置信息
  • 三、Spring IoC快速入门
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档