对于Spring的一些理解

本文深入探讨了Spring框架的核心特性,包括IOC、AOP等,并详细解释了它们如何帮助降低代码耦合度,提升软件开发效率。此外,还介绍了Spring的模块划分、bean的生命周期管理以及常用的注解。

对于Spring的一些理解

选择Spring的原因
首先,spring是一个开源的应用框架,因为IOC让其实现了低耦合,同时他能集成一些别的框架,比如:Spring MVC、及Mybatis等。因为其相对强大的功能,和其开源免费的性质,让其极其的受欢迎。

Spring的特点
IOC-------控制反转
AOP-------面向切面编程
容器
事务管理

Spring的模块
首先是最重要的模块,核心容器层
核心容器包含的模块有:Spring Core、Spring context、Spring Beans、SPEL
另外就是相对于一个应用程序而言,也很重要的两个模块,一个是Web层,一个是数据访问/集成层
我认为web层主要负责与前端进行交互,这层我们普遍认识的的模块有servlet等。
另外数据访问/集成层则主要负责与数据库进行交互,对于这层而言,我们主要认识到的模块有JDBC、ORM、Transaction等;
另外的就是比较特性化的一些,比如说AOP层,他负责支持面向切面编程。Instrumentation层,该层主要支持类检测和类加载方面。

提到Spring不可避免的两个话题,就是IOC和AOP,首先我们来聊一下IOC

IOC(控制反转)
什么是控制反转?
控制反转通俗来讲,就是我们把我们一部分创建对象的权力,赋予给框架,让框架能实现对象的创建。

那我们为什么要使用控制反转呢?
首先,不可否认,使用控制反转确实能够简化一定量的代码量。当然,这不是主要原因。
我认为主要的原因,还是因为IOC能降低程序的耦合度。

那么这时候会问,为什么IOC能降低耦合呢?
这个问题的话,我们举个例子,当我们没有IOC的时候,我们的程序刚开始是怎么创建的呢,我们可能会直接在一个类里,创建另一个类,这个时候,我们可以把这两个类看成两个齿轮,当我们直接的进行创建的时候,这两个齿轮就像严丝合缝的一样,紧密的联系了起来,这个时候,一个类的变动,很容易影响另一个类,这个时候我们说,这两个类耦合度很高。
而过了一段时间之后,我们发现我们可以把一些类中的相同的功能,集成到一些接口中,这个时候,我们发现当我们需要修改一些类的时候,我们会更加容易,而这时候类之间的耦合度低了一点,至于为什么,我们可以想象一下,这时候我们把一个类比作一个齿轮,而这时候,齿轮的一些齿是由接口构成的,当我们把这些小齿删除掉的时候,我们发现,这个齿轮和另一个齿轮间的联系少了很多,通过这个例子,我们可以发现接口是能解耦的。
再后来,我们发现这个只是接口的话,耦合度还是有点高,后来呢我们发现,我们可以建造一个工厂,可以说是一个第三方,而这个时候,我们就发现,这样做的话,耦合度就又会降低一点。我们还是举例子,说我们把我们这个工厂看作两个齿轮间的大齿轮,我们通过小齿轮的条件,创建出我们的该有的齿轮,这个时候的话,我们再把中间的大齿轮拿掉的话,我们会发现这个时候其实两个齿轮间是没有任何联系的。这个时候耦合度已经降低到很低了。

说了这么多,我们单纯是为了解释为什么工厂模式能够解耦么,其实不然,因为IOC其实就是工厂模式+反射实现的,所以说IOC能解耦。

IOC和DI

首先,DI是依赖注入,当我们说到这两个词的时候,我们会发现,好像他们一直是能通用的两个词,那么为什么还要建立两个呢?
我认为,IOC更倾向于它所表达的是一种模式,而DI则是一种行为,也就是说,DI更倾向于是两个对象依赖与注入之间的关系。

三种注入方式
接口注入、构造器注入、setter注入。
首先,更推荐使用setter注入,这种注入方式更加灵活,也就是说Setter需要什么我们就注入什么,其次,推荐构造器注入,注入构造这个对象需要的类,而构造器和setter相比而言,注入的更多,但是相对于来说,就不是像setter想注入什么注入什么。但是也比setter简单轻便。再次就是接口注入,
接口注入的话,最大的缺点就是需要无端的创建很多不是十分必须的接口,那么这个时候,结构就显得冗余。

怎么配置bean
配置文件、注解、以及在@configuration中注解@bean(这种方式和配置文件相似)。

@scope的取值
Singleton------单例
Prototype------多例
Request------请求(web)
Session------session(web)
Global-Session------Global-Session(web)

bean生命周期

首先通过配置文件等途径进行实例化;之后注入属性;之后设置id;之后通过前处理器(init之前);之后实现init()方法;之后通过后处理器(init()之后);最后进行destroy方法的实现。

常用注解
@Controller、@Service、@Repository、@RequestMapping、@Autowire、@Qualifier、@Scope、@Configuration、@Bean、@Component、@Before、@After、@Around、@Pointcut、@Aspect

启动注解
< context:annotation-config/ >

对于@Controller、@Service、@Repository、@Component看法
@Service和@Component基本相同,只是这个注解语义更加明显,而@Controller和@Repository则是对@Component的特化,更倾向于对其专注方面的效率。

@Autowire和@Qualifier
全是注入,但@Qualifier只注入特定名称的对象。

事务管理
程序化事务管理、声明式事务管理

对于Spring而言第二个特点就是AOP。

AOP—面向切面编程

首先,什么时候我们需要使用切面?
当我们有很多对象需要走一个地方的时候,那这个地方我们就可以当成一个切面,而我们就可以通过通知方法对对象进行编制,而编制的过程实际上就是一个代理的过程。

常用注解
@Aspect、@joinput、@pointcut
Advice(@Before、@After Returning、@After Throwing、@Around、@After)

//后续继续添加

DispatcherServlet的工作流程
首先,前端向后端发送URL请求,被DispatcherServlet捕获;
被捕获之后通过配置对URL拆解,变成URI,调用HandlerMapping得到对应的Handler;
通过对应的Handler选择一个HandlerAdapter;
将request中的参数导入并进行处理;
执行完成后返回一个Model And View对象;
选择一个ViewResolver,在返回给Dispatcher;
ViewResolver根据view和model进行渲染。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值