spring框架基础

  浅谈spring基础

1.spring的作用
我们在使用hibernate进行或别的控制层框架进行编程时,它们都对应了OOP的思想,都是一种纵向
的编程过程,它们在运行时下一步的执行都严重依赖于上一步的成功执行后,相互之间的偶合性
太大。而spring就是专门为了解除它们的偶合性的。
2.spring思想
1.IOC (inversion of control) 控制反转
主要用于管理对象
由主动创建对象变成被动等待对象创建的过程
简单来讲就好比是,领导想出去旅游,会跟秘书讲.我什么时候要去哪哪玩一下.而不会说:
我什么时候要去哪哪玩一下,坐飞机还是火车,要住什么旅馆,每天吃什么东西.这些都会
交给秘书去安排.而等到旅游景区后,自然会有车来接到酒店,吃住玩都已经被秘书安排妥当了.
这就是控制反转,把权力交给秘书,领导只负责玩.在这其中,秘书就相当于框架里的BeanFactor
,负责到达地点之后的所有行程。而整个景区就是框架里的JavaBean.
传统模式就好比是,普通人出去旅游,要先在网上找好旅馆,然后打电话预定,等到旅游结束
后再到前台把房间退掉。再这个过程中,网络就是查询上下文的Context,它其中的一个职能
就是帮人找旅馆。就是lookup()方法,网络上所有的酒店目录就是JNDI
(java Naming Directory Interface java命名和目录接口),酒店是EJB(Enterprise Java
Bean 它是Java应用程序服务器定义下的服务器端组件模型,同时是一个不依赖供应商的
编程接口。简单来讲就是一个主要应用于企业的类,主要把整个商业化流程抽象化实现)
网络是EJB的容器。
区别:
普通人出去旅游比较麻烦,不但要自己找旅馆,旅游结束后还得再去前台把房间退掉。而
领导呢,他只要跟秘书说一下就OK了,把权力交到秘书手中,等到需要的时候直接注入
就可以了。DI(Dependency Injection)

2.AOP (aspect Oriented Prigramming) 面向切面编程
1.AOP 作用
AOP可以说是OOP的补充和完善.OOP有封装,继承,多态等概念来建立一种对象层次结构,用以模拟
公共行为的一个集合.当我们需要为分散的对象引入一个公共的行为(如:日志,安全,事务)的
时候,OOP往往会显得力不从心。也就是说OOP允许你定义从上到下的关系,但不适合从左到右的
关系,比如日志。日志往往是水平的散步在所有对象的层次中,而与它所散步到的对象的核心
功能毫无关系。这种散步在各处的无关代码被称为横切代码。如果想要在OOP中实现,势必会产
生大量的重复代码,提升模块间的耦合度,不利于代码的复用。
但是AOP正好解决了这些不利因素,它利用"横切"的技术,切开封装对象的内部,把那些影响到多
个类的公共行为全部封装到一个可重复使用的类里,即切面(Aspect)。简单来讲:就是把那些与
业务无关,却为业务模块共同调用的逻辑或责任封装起来,便于减少代码间的重复性,降低模块
间的耦合度,减少了后期操作和维护的难度。AOP代表的是横向关系,加入对象是一根柱子,里面
有属性和方法,那么AOP所做的就是切开这根柱子,得到里面的信息并加入新的信息,最后再把柱子
粘合起来。
当使用横切技术时,AOP把软件分成两个部分,核心业务逻辑和横向切入点。
好处:
1.切入点集中在一块,不会产生大量重复的代码;
2.核心模块关注核心功能的代码,降低模块间的耦合度。
2.AOP 实现原理
AOP其实是由目标类的代理类实现的,代理分为静态代理和动态代理两类。其中,静态代理有继
承和实现接口两种方法,它们大体都是子类实现重写或重构父类方法,在重写或重构中加入需要
的功能,最后回调对象方法。但是静态代理因为实现起来太过繁琐而被舍弃了。
动态代理:它其实是AOP框架动态生成的一个对象,该对象可以作为目标对象使用。动态代理包括
了目标对象的所有方法,但是由于动态代理中的方法和目标对象中的方法存在差异,所以使用动态
代理时只在特定的切入点增加方法,然后回调目标对象的方法。

AOP是spring中很重要的一个功能, 我会在下一篇里面详解一下,希望大家多多关注,谢谢。

原文地址:https://www.cnblogs.com/zhuangfei/p/7158920.html