Spring初步认识-(1)
Spring:为了适应企业级系统的大规模,即:用户数量大
、数据规模大
、功能众多
、性能和安全的要求高
、业务复杂
、灵活应变
的需求而产生的轻量级框架,
以上目的,由以下四个策略来实现:
- 基于POJO(Plain Old Java Object普通Java类)的轻量级和最小入侵性编程
- 通过依赖注入和面向接口实现松耦合
- 基于切面的惯例进行声明式编程
- 通过切面和模板减少样板式代码
内容:IOC 容器,AOP实现数据访问支持简化JDBC/ORM框架声明式事务 WEB集成
设计理念:面向Bean的编程
核心技术:
控制反转(IOC : Inversion of Control)/依赖注入(DI :Dependency Injection)
面向切面编程:(AOP: Aspect Oriented Programming)
优点:
- 低侵入式设计(去除此框架后,只需要修改一些配置信息,代码的污染极低)
- 独立于各大中应用服务器
- 依赖注入的特性将组件关系透明化 ,降低了业务对象替换的复杂性,提高了组件之间的解耦
- 高内聚,低耦合
- AOP支持将一些通用的任务和安全、事务、日志等进行集中式管理,从而提供了更好的复用
Spring框架是一个分层框架,包含了一系列的功能要素得分为大约20个模块
控制反转(IOC)/依赖注入(DI)
将组件对象的控制权 从代码本身转移到外部容器的思想:分离关注点,使用接口,不在关注实现(也就是由外部的IOC容器来控制组件对象的创建、销毁,不需要我们去实现类)
spring 的出现,解耦合不同类之间的依赖,谁需要谁,都找 spring,一切由spring提供,不需要自己将类实例化
依赖注入:将组件的构建和使用分开,和控制反转一样,只是表述不同
AOP(Aspect Oriented Programming):
面向切面编程,函数式编程的一种衍生泛型。,面向…编程,只是关注点的不同,例如:
- 面向过程编程: 就看实现一个功能需要什么步骤,然后用代码表示出这些步骤就好了,不管代码的重用,耦合性问题。关注点是 步骤、过程。
- 面向对象编程: 需要实现该功能,但是需要考虑到流程的结构,代码重用,耦合问题。需要先建立一个对象,对这个对象实例化实现功能。关注点是 对象。
- 面向切面编程: 它关注于应用中的 核心业务 模块,而设法将一些次要的,辅助的功能统一管理,如日志、安全、验证等。
- AOP采取横向抽取机制,取代了传统的纵向继承体系 重复性代码
- 经典应用:事务管理、性能监视、安全检查、缓存、日志等等…
- Spring Aop 使用纯Java实现,补充需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类 注入 增强代码
- AspectJ是一个基于Java语言的AOP框架,Spring 2.0开始 Spring AOP引入对Aspect 的支持,Aspect扩展了Java语言,提供一个专门的编译器,在编译时提供横向代码的织入.
横向:将一个类抽取出来,从其生命周期(时间轴)来操作,在其生命周期的不同阶段加入一些可以共用的功能模块,来达到代码复用的目的。区别于在其原有的类上通过继承,多态再去实现更多的功能。
在AOP中的一些概念:
1、目标类(target) , 需要被代理的类 例如 UserService
2、连接点(JoinPoint):是指那些可能被拦截的方法,例如 addUser 。。。。。
3、切入点(PointCut) 已经被增强的连接点 例如:addUser…….
4、通知/增强(advice) :增强代码 前置增强 后置增强 环绕增强 异常增强 最终增强
5、织入(Weaving) 是指把增强 advice 应用到目标对象target来创建新的代理对象Proxy的过程
6、代理类(Proxy)
7、Aspect(切面) 是切入点PointCut和通知advice的结合
参考: spring 框架的核心总结