自学Spring的入门

1、什么是jar包?及其作用

  软件开发者将代码打包成一个JDK能够识别的压缩格式,即:jar包。Jar包其实就一个是代码的class文件的压缩包,我们可以通过导入别人的jar包来实现自己项目上的一些功能。

2、简述什么是框架以及框架的体现形式

  所谓框架,就是开发者将不同项目之间的冗余部分代码,封装成一个框架。用来解决某一类具体问题的代码模块。
  体现形式:通过将代码模块化,打包成一堆jar包,我们通过导入jar包进行使用。

3、框架的使用流程

①导入jar包到我们项目的目录中
②阅读框架的API文档,根据API文档调用相关资源完成功能开发。
③配置好框架的配置文件,比如: 代码中涉及到的常量数据

4、整体思想

我们在使用框架时,要对数据和代码进行解耦,使用者通过配置文件来自定义数据。代码通过读取配置文件存储的信息来进行逻辑处理。

Spring框架的介绍

先说问题:

① 目前使用mybatis结合servlet 的使用的时候,书写的代码业务层相对比较的麻烦
② 目前书写的代码层和层之间的耦合性比较高
③ 目前书写的代码后期的扩展性比较低
④ 整体项目中事务的处理机制

再说解决
我们使用Spring 框架来进行解决。Spring 是可以解决业务层和其他各层之间的耦合 (高内聚、低耦合)。

1、Spring的简介

(1) Spring, 春天. Spring框架在开发中的角色时用于管理其他的框架和对象。换句话说,Spring可以使已有的技术更好用。

(2) Spring之父: Rod Johnson 即是计算机大佬,又是悉尼大学音乐博士。

(3) 轮子理论, 不要重复发明轮子。

(4) 关于版本: 在spring3之前,spring只提供一个jar,spring.jar;从spring3之后,官方对spring做了拆分,分成了多个jar包(spring-aop,spring-beans,spring-context,spring-expression,spring-core,spring-jdbc, spring-tx,spring-web,spring-webmvc,…)

(5) Jar包和源码的下载地址
https://github.com/spring-projects/spring-framework/tags
https://repo.spring.io/libs-release-local/org/springframework/spring/

2、Spring主要内容

Spring主要内容分为三大块:
一、IOC / DI: 控制反转 / 依赖注入
二、AOP: 面向切面编程
三、TX:声明式事务

此处配个图:
在这里插入图片描述
引入问题:
  在使用MVC的结构体系来完成后台功能代码的声明时,在一定程度上降低了代码的冗余,但是层与层之间的耦合性过高,造成代码升级维护特别麻烦,比如,某天业务层某个类文件需要替换为新的类文件,那么,控制层所有调用该业务类的代码需要全部修改为调用新的业务类。

问题解决:
  我们可以使用Sprint IOC技术实现将层与层对象之间的关系进行解耦,由直接变为间接。

在这里插入图片描述
如上图:
问题:如果将Servlet中的AService替换为调用BService,需要修改Servlet中调用AService的代码。而且如果BService中的业务方法的名字和AService中的不一致还需修改调用的方法名,会非常的麻烦。

优化:可以让AService和BService实现相同的接口,这样在Servlet中只需替换AService为BService即可,无需修改方法调用,但是就算这样依然不完美,因为调用AService的Servlet有N个修改起来仍然麻烦.

解决:将Servlet和Service的直接关系变为间接关系,比如A类调用B类,变为A类调用C类从C对象中获取B对象使用,如果需要将B对替换为B2对象,则只需要修改C对象中的B对象属性为B2对象即可,和A没有直接关系。而C对象的作用就是存储B对象的,C对象和A对象之间虽然是直接关系,但是C对象不会修改升级。
在这里插入图片描述

总结:只是将A获取B对的方式由直接获取变为间接获取,获取之后的逻辑流程全部不变。

3、具体谈谈Spring IOC

Spring IOC的作用:就是将层与层对象之间的关系进行解耦,由直接变为间接。

如何使用Spring IOC呢?换句话说什么时候使用Spring IOC呢?

  解答:什么时候使用IOC对对象进行解耦是一个主观问题,应当根据代码的结构以及功能的需求进行分析,然后决定哪些对象之间需要使用IOC解耦。一般情况下,在MVC代码结构中,会将Servlet和Service之间解耦,Service和mapper之间解耦。

4、SpringIOC的基本使用流程

使用流程

①创建项目然后配置web的相关依赖以及项目结构的配置
②在src下创建并配置applicationcontext.xml。
③在业务层中创建UserService接口及其实现类
④在项目中创建MVC的包结构,并创建IOCServlet,并在Service方法中获取Spring 的容器对象,并从容器对象中获取业务层对象,完成业务操作。

5、SpringIOC创建对象的方式

① 通过构造器来创建

1、无参构造器

  • 特点:Spring容器默认使用无参构造方式创建对象
  • 使用:在配置文件中直接使用bean标签配置即可,无需过多声明。
    <bean id="stu1" class="com.pojo.Student"></bean>

2、有参构造器

  • 特点:Spring容器对根据配置调用的有参构造器创建一个带有初始化数据的对象
  • 使用:constructor-arg:使用bean的字标签来声明调用的构造器的形参的个数
/**
    一个子标签表示一个参数:
    属性:index:参数的下标
          type:参数的类型,全限定路径
          name:参数的形参名
          value:参数要给的值
*/
    <bean id="stu2" class="com.pojo.Student">
        <constructor-arg index="0" type="java.lang.Integer" name="sid" value="1"></constructor-arg>
        <constructor-arg index="1" type="java.lang.String" name="sname" value="张三"></constructor-arg>
    </bean>  

② 通过属性注入方式来创建

<!--
    使用属性注入方式:
    注意:必须提供属性的set方法,底层通过反射调用set方法给属性赋值。
    一个property子标签表示一个属性赋值
    name属性的值为属性名,value属性为要赋的值
   此方式相对于构造器方式使用面更广,更灵活,因为不需要声明对应的构造器
-->
    <bean id="stu3" class="com.pojo.Student">
        <property name="sid" value="2"></property>
        <property name="sname" value="李四"></property>
    </bean>

③ 通过工厂模式来创建
  Spring容器创建工厂,并自动调用其创建的工厂的生产对象的方法,生产的对象直接存储在Spring容器中,我们直接从Spring容器中获取对象,完成功能开发.
工厂模式又分:动态工厂模式、静态工厂模式!

 <!--工厂设计模式-->
    <!--动态工厂-->
    <!--可以理解为普通方法,通过new关键字调用-->
        <bean id="factory" class="com.pojo.StudentFactory"></bean>
        <!--生产Student对象-->
        <bean id="stu4" factory-bean="factory" factory-method="newIntance"></bean>
    <!--静态工厂-->
    <!--可以理解为静态方法,直接通过类名调用-->
        <bean id="stu5" class="com.pojo.StudentFactory2" factory-method="newIntance"></bean>

DI依赖注入

类对象之间的依赖关系是什么?

  如果一个类中需要调用另外一个类中的资源,我们会在该类 中声明另外一个类的属性,比如A类中的某些功能方法需要调用B类中的某个功能来 实现,那么我们就会在类A中声明属性类B,我们将A类和B类之间的关系称为依赖关系。

问题
  在学习了SpringIOC后,我们会让Spring容器对象来帮助我们创建需要的对象,但是目前我们只会让Spring容器创建一个基本类型属性有值的对象,如果要Spring容器帮我们创建的是一个带有依赖关系的对象,该怎么办?

解决
  我们可以使用DI依赖注入,解决上述问题。

DI依赖注入流程总结:

  1. 配置bean
  • 当前要使用的对象
  • 当前对象依赖的对象的bean 当前对象依赖的对象的依赖对象的bean…
  1. 组装
  • 构造器方式在constructor-arg标签上使用ref属性。
  • 属性注入方式在property标签上使用ref属性。

【注意】:ref的属性值为要赋值的bean的id

单例和多例模式的设置

①单例模式:bean标签的属性scorp=“singleton”
Spring容器创建时,就会创建一个唯一的对象。

1、Spring容器在创建的时候,就会创建Bean对象。
2、每次调用getBean都返回spring容器中的唯一一个对象。

②多例模式:bean标签的属性scorp=“prototype”
每次调用getBean都会创建新的一个新对象。

1、多例在Spring容器被创建的时候,不会跟着一起被创建。
2、当每次调用getBean,才会创建一个新对象返回。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值