Spring

Spring

Spring与其他框架的不同

不是替换原有的框架,而是对其进行管理。

Spring框架

Spring 框架是一个项目管理框架,其底层使用了23中设计模式中的工厂设计等模式,用力里将现有的项目中的每一个组件(Action,Servvice,Dao,事务相关等都是项目中的一个组件)统一生产、并管理。

注意:实体类,通常不适用Spring管理

Spring 中的两大核心思想

IOC ( Inversion of controll)控制反转

将创建对象的权限转交给Spring ,Spring通过工厂模式和反射机制完成对象的创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JsDMoiYr-1606376732681)(1527679670305.png)]

DI(dependcy Injection)依赖注入(在 IOC基础上提出 DI思想)注入=为实例变量赋值 ; 依赖=需要

Spring将依赖的对象,作为实例变量,由Spring的工厂进行创建以及赋值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhcDKtTT-1606376732683)(1527679691364.png)]

AOP ( aspect or iented programming) 面向切面编程
举个例子:歌星都有好多助理,歌星最重要的一件事就是唱歌,其他事他不用关注,比如唱歌前可能需要和其他人谈合作,还要布置场地,唱歌后还要收钱等等,这些统统交给他对应的助理去做。也许哪一天,这个歌星做慈善,免费唱歌了,不收钱了,那么就可以把收钱这个助力给辞退了。这就是 AOP,每个人各司其职,灵活组合,达到一种可配置的、可插拔的程序结构。AOP 的实现原理就是代理模式。


工厂模式回顾

①作用:创建对象

②工厂的使用步骤:

>I、创建类
>
>II、编写配置文件(applicationContext.properties,配置key=value)
>
>III、调用工厂API,完成对象的创建

③好处:解耦、提高维护性


Spring环境搭建

1、导入相关的Jar包(www.springsource.org官网下载,3.X版本开始不再提供依赖Jar包)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aZGBXBg0-1606376732685)(1527642399822.png)]

2、导入第三方依赖Jar包:日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-32zY1uJ4-1606376732687)(1527642420442.png)]

3、配置文件:配置文件的名称,位置没有限制;约定俗称为:applicationContext.xml


Spring 开发步骤

1、书写目标类。

2、编写配置文件(applicationContext.xml)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ByJVNuu1-1606376732688)(1527678035665.png)]

3、调用Spring 的工厂API(ApplicationContext)

I、作用:Spring的工厂,负责创建对象

II、实现类

本地环境:ClassPathXMLApplicationContext

web环境:XmlWebApplicationContext、

AnnotationConfigWebApplicationContext

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U6SiXsNy-1606376732689)(1527678358893.png)]

Spring的注入(Injection)

1、在Spring创建对象的同时,为该对象的实例变量赋值

2、Set注入:调用实体的Set方法,完成属性的赋值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ltEuUIu-1606376732690)(1527678648132.png)]

JDK原生类型
8种基本类型+String+Date

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-68FxKh3G-1606376732691)(1527678757147.png)]

容器类型(数组、List、Set、Map、Properties、容器的嵌套注入)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V4js8u1R-1606376732692)(1527678844866.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vMgNx6BB-1606376732693)(1527678856029.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZrLce1Kz-1606376732694)(1527678866363.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-38HOCGU5-1606376732695)(1527678876227.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T4xlzuuZ-1606376732696)(1527678886859.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FeRViDJg-1606376732697)(1527678927940.png)]

自建类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lwJCA5QV-1606376732699)(1527679181997.png)]

总结:Spring注入的好处:

解耦,没有强关联性,更容易更换实现。Spring是一个面向接口编程的框架

FactoryBean

作用:用于创建复杂的对象,或者步骤较多的对象的创建

开发步骤

I、实现FactoryBean接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LkoazdIO-1606376732700)(1527679390702.png)]

II、配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBvZOAS1-1606376732701)(1527679415266.png)]

特例:如果需要获取FactoryBean本身类型的对象,使用工厂的ctx.getBean("&conn"); --> 语法:"&id的名称"


Spring中控制对象多例或者单例

I、简单对象

通过配置文件中的属性进行控制(单例:singleton默认 , 多例:prototype)

II、复杂对象

通过实现FactoryBean接口,并且在isSingleton方法中返回true | false 控制

单例或者多例的选择

I、单例:SqlSessionFactory、Service、DAO

II、多例:Connection、SqlSession、Action、ShoppingCart

Spring工厂创建对象的生命周期

I. 创建:工厂创建之后,会根据Spring的配置文件完成所有对象的创建(饿汉式)。

为什么使用饿汉式创建对象?

避免多次IO操作,提高程序运行效率,减少创建对象的时间。(概念接近连接池)

II. 对象生命周期方法:

1、对象初始化方法:

<bean init-method="自定义方法" /> 
<!--Spring在创建对象之后,立即调用对象的初始化方法。-->

2、对象销毁方法:

<bean destroy-method="自定义方法" /> 
<!--Spring在工厂关闭之后,立即调用对象的销毁方法。-->

III、对象销毁:工厂的close()方法执行,则关闭工厂,销毁对象。

IV. Singleton对象由Spring工厂销毁,Prototype对象由JVM的GC销毁

<context:property-placeholer />配置文件参数化

1、作用:将经常需要修改的配置信息,转移到局部配置.properties文件中,易于修改和维护

2、实现步骤:

I、引入context的命名空间和xsd文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpj2ysz2-1606376732702)(1527680290430.png)]

II、引入局部配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a6nNhFH1-1606376732703)(1527680348437.png)]

III. 参数化:${username}在Spring 3.x起,与数据库不兼容,不能使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p7rN8JbY-1606376732703)(1527680367658.png)]


代理模式

概念:将核心功能与辅助功能分离,达到核心功能更纯粹、辅助功能可复用。

I、静态代理设计模式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iPcIsNhs-1606376732704)(1527680550254.png)]

概念:

1、通过代理类,为原始类(目标类)添加额外的辅助功能,更容易更换代理类的实现,利于维护。

2、代理类 = 实现与原始类相同的接口 + 额外的辅助功能 + 调用原始类的方法。

静态代理的问题:

1、代理类数量过多,不利于项目的管理和维护。

2、多个代理类的辅助功能存在冗余,修改时,维护性差。


动态代理设计模式

概念:

由Spring负责动态生成的代理类,为原始类添加额外的辅助功能。

动态代理设计模式的实现

I、引入Jar包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dB3NcHPy-1606376732705)(1527680717923.png)]

II、引入aop的xmlns和xsd文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQZaoeZK-1606376732705)(1527680750688.png)]

III、详细实现步骤:

1、创建原始对象:(没有复制功能的Service对象)

2、添加辅助功能对象(Advice的实现类)

​ i). 前置通知MethodBeforeAdvice:在原始功能前,添加额外功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3uBLRH5Z-1606376732706)(1527766491401.png)]

​ ii). 后置通知AfterReturningAdvice:在原始功能后,添加额外功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aTo4DLy8-1606376732707)(1527766507051.png)]

iii). 环绕通知MethodInterceptor:在原始功能的前、后添加额外功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3V21HLOt-1606376732708)(1527766521458.png)]

​ iv). 异常通知ThrowsAdvice:在原始功能产生异常时,添加额外功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sbq6ZKw5-1606376732709)(1527766534019.png)]

3、指定切入点:(明确需要添加额外功能的方法)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-206nsioj-1606376732712)(1527680960180.png)]

4、组装切面:(在pointcut-ref切入点位置,添加advice-ref所代表的额外功能 advice)

这里写图片描述

注意:动态代理,仍旧使用工厂获得原始对象,Spring会根据配置文件中的“切入点+额外功能”决定,是否创建代理对象。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值