Spring特点:
- 轻量级
- 控制反转
- 通过一种称作控制反转
IOC
的技术促进了低耦合 - 应用了
IOC
- 通过一种称作控制反转
- 面向切面
- 支持面向切面的编程(
AOP
),并且把应用业务逻辑和系统服务分开
- 支持面向切面的编程(
- 容器
- Spring包含并管理应用对象的配置和生命周期
- 框架集合
总结一句话:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。
SpringIOC原理
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法, 没有IOC的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将 对象的创建转移给第三方
,个人认为所谓控制反转就是: 获得依赖对象的方式反转了
。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。依赖注入,把对应的属性的值注入到具体的对象中,@Autowired
populateBean
完成属性值的注入
Spring AOP
AOP(Aspect Oriented Programming)意为: 面向切面编程
,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
所谓” 切面
“,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来, ==便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。==
关于AOP:正如图所示,我们开发过程中使用的顺序就是图中的纵向开发,当我们想修改其中某一块的内容时,例如加日志功能 log ,我们就需要使用 代理模式 ,进行 横向开发 。
AOP在Spring中的作用
提供声明式事务;允许用户自定义切面
- 横切关注点:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志,安全,缓存,事务等等…
- 切面(ASPECT):横切关注点被模块化的特殊对象。即,它是一个类。
- 通知(Advice):切面必须要完成的工作。即,它是类中的一个方法。
- 目标(Target):被通知对象。
- 代理(Proxy):向目标对象应用通知之后创建的对象。
- 切入点(PointCut):切面通知执行的“地点”的定义。
- 连接点(JointPoint):与切入点匹配的执行点。