Spring是 Java 应用程序开发框架。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO编程模型来促进良好的编程实践。
Spring Framework
Spring 基础框架是 Spring Framework ,基本上任何其他 Spring 项目都是以 Spring Framework 为基础的。
特点:
- 非侵入式:使用 Spring Framework 开发应用程序时,**Spring 完全不会破坏原有结构,反而能将组件结构进一步简化。**这就使得基于 Spring Framework 开发应用程序时结构清晰、简洁优雅。
- 控制反转IOC:翻转资源获取方向。原本需要开发者自行获取资源,现在变为由容器主动的将资源推送给需要的组件,提高了开发的效率。
- 面向切面编程AOP:在不修改源代码的基础上增强代码功能。
- 容器:Spring IOC 是一个容器,因为它包含并且管理组件对象的生命周期。组件享受到了容器化的管理,提高了开发效率。
- 组件化:Spring 实现了使用简单的组件配置组合成一个复杂的应用。**在 Spring 中可以使用XML和 Java 注解组合这些对象。**这使得系统搭建更加简便。
- 声明式:很多以前需要编写代码才能实现的功能,现在只需要声明需求即可由框架代为实现。
Spring Framework五大功能模块:
IOC
IOC:Inversion of Control,反转控制。
在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,同时降低了开发效率。
反转控制的思想颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。
IOC的具体实现形式是依赖注入(DI:Dependency Injection) DI 是 IOC
的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。
所以:IOC 是一种反转控制的思想, 而 DI 是对 IOC 的一种具体实现。
IOC的实现方式有两种:
1.基于xml管理bean
2.基于注解管理bean
AOP
AOP:Aspect Oriented Programming,面向切面编程
它是面向对象编程(OOP)的一种补充和完善,它以通过预编译方式和运行期动态代理方式实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。
AOP的实现方式有两种:
1.基于注解的AOP
2.基于xml的AOP
术语:
- 横切关注点:
从每个方法中抽取出来的同一类非核心业务。在同一个项目中,我们可以使用多个横切关注点对相关方法进行多个不同方面的增强。
这个概念不是语法层面天然存在的,而是根据附加功能的逻辑上的需要:有十个附加功能,就有十个横切关注点。- 通知:
每一个横切关注点上要做的事情都需要写一个方法来实现,这样的方法就叫通知方法。
前置通知:在被代理的目标方法前执行
返回通知:在被代理的目标方法成功结束后执行
异常通知:在被代理的目标方法异常结束后执行
后置通知:在被代理的目标方法最终结束后执行
环绕通知:使用try…catch…finally结构围绕整个被代理的目标方法,包括上面四种通知对应的所
有位置- 切面:
封装通知方法的类(封装横切关注点的类)。- 目标:
被代理的目标对象- 代理:
向目标对象应用通知后创建的代理对象- 连接点:
每一个横切位置都是连接点- 切入点:
定位连接点的方式。
每个类的方法中都包含多个连接点,所以连接点是类中客观存在的事物(从逻辑上来说)。
如果把连接点看作数据库中的记录,那么切入点就是查询记录的 SQL 语句。
Spring 的 AOP 技术可以通过切入点定位到特定的连接点。
切点通过 org.springframework.aop.Pointcut 接口进行描述,它使用类和方法作为连接点的查询条件。
AOP作用
AOP主要做的是:
抽横切关注点,封装到切面中,此时是一个通知,再通过切入点定位到连接点。即在不改变代码的前提下,把切面中的通知,通过切入点表达式连接到连接点上,实现功能的增强。