一.IoC
IoC
(Inversion of Control)
中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection)
IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。
其原理是基于OO设计原则的The Hollywood Principle:Don't call us, we'll call you(别找我,我会来找你的)。也就是说,所有的组件都是被动的(Passive),所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容 器负责管理。
简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
二.What is AOP? AOP即Aspect-Oriented Programming的缩写,中文意思是面向切面编程,也有译作面向方面编程的,因为Aspect有“方面、见地”的意思。AOP实际上是一种编程思 想,由Gregor Kiczales在Palo Alto研究中心领导的一个研究小组于1997年提出[1]。在传统的面向对象(Object-Oriented Progr amming,OOP)编程中,对垂直切面关注度很高,横切面关注却很少,也很难关注。也就是说,我们利用OOP思想可以很好的处理业务流程,却不能把系 统中的某些特定的重复性行为封装在某个模块中。比如在很多的业务中都需要记录操作日志,结果我们不得不在业务流程种嵌入大量的日志记录代码。无论是对业务 代码还是对日志记录代码来说,今后的维护都是非常复杂的。由于系统种嵌入了这种大量的与业务无关的其它重复性代码,系统的复杂性、代码的重复性增加了,从 而使bug的发生率也大大的增加。
在OOP面向对象编程中,我们总是按照某种特定的执行顺序来实现业务流程,各个执行步骤之间是相互衔接、相互耦合的。比如某个对象抛出了异常,我们就必须 对异常进行处理后才能进行下一步的操作;又比如我们要把一个学生记录插入到教务管理系统的学生表中去,那么我们就必须按照注册驱动程序、连接数据库、创建 一个statement、生成并执行SQL语句、处理结果、关闭JDBC对象等步骤按部就班的编写我们的代码。可以看到上面的步骤种除了执行SQL和处理 结果是我们业务流程所必须的外,其它的都是重复的准备和殿后工作,与业务流程毫无关系,另外我们还得要考虑程序执行过程中的异常。天!我们只是需要向一张 表中插入数据而已,可是却不得不和这些大量的重复代码纠缠在一起,我们不得不把大量的精力用在这些代码上而无法专心的设计业务流程。
那么什么可以解决这个问题呢?这时候,我们需要AOP,关注系统的“截面”,在适当的时候“拦截”程序的执行流程,把程序的预处理和后处理交给某个拦截器 来完成。比如在操作数据库时要记录日志,如果使用AOP的编程思想,那么我们在处理业务流程时不必再考虑日志记录,而是把它交给一个特定的日志记录模块去 完成。这样,业务流程就完全的从其它无关的代码中解放出来,各模块之间的分工更加明确,程序维护也变得容易多了。
正如上所说,AOP不是一种技术,而是编程思想。凡是符合AOP思想的技术,都可以看成是AOP的实现。目前的AOP实现有AspectJ、 JBoss4.0、nanning、spring等项目。其中Spring对AOP进行了很好的实现,同时Spring AOP也是Spring的两大核心之一。
下面介绍一些关于AOP的一些概念,如果觉得有些晦涩,也可以先不必仔细关注。
连接点(join point):它是指应用中执行的某个点,即程序执行流程中的某个点。如执行某个语句或者语句块、执行某个方法、装载某个类、抛出某个异常……,如下:
-
public static void main(String[] args) throws Exception {
-
- int i = 0 ;
-
- i++;
- CallMyMethod();
-
- throw new Exception( "哈哈,一个异常!" );
-
- }
注意:这里每一个语句都可以被称作一个连接点。
连接点是有“强弱”的,这种强弱可以用“粒度”来表示,Spring AOP支持到方法级的连接点粒度。
切入点(pointcut): 切入点是连接点的集合,它通常和装备联系在一起,是切面和程序流程的交叉点。比如说,定义了一个pointcut,它将抛出异常ClassNotFoundException和某个装备联系起来,那么在程序执行过程中,如果抛出了该异常,那么相应的装备就会被触发执行。
装备(advice): 也可以叫做“通知”,指切面在程序运行到某个连接点所触发的动作。在这个动作种我们可以定义自己的处理逻辑。装备需要利用切入点和连接点联系起来才会被触 发。目前AOP定义了五种装备:前置装备(Before advice)、后置装备(After advice)、环绕装备(Around Advice)、异常装备(After throwing advice)、返回后装备(After returning advice)。这些装备以后会逐一介绍。
目标对象(target object): 被一个或者多个切面装备的对象。所以它有时候也被称为Advised Object。
引入(introduction): 声明额外的成员字段或者成员方法。它可以给一个确定的对象新增某些字段或者方法。
织入(weaving): 将切面和目标对象联系在一起的过程。这个过程可以在编译期完成,也可以在类加载时和运行时完成。Spring AOP是在运行期完成织入的。
切面(aspect): 一个关注点的模块化。它实际上是一段将被织入到程序流程中的一段代码。
相关推荐
spring-**core**-4.3.6.RELEASE.jar :包含spring框架基本的核心工具类,spring其他组件都要用到这个包里的类,其他组件的基本核心 spring-**beans**-4.3.6.RELEASE.jar:所有应用都要用到的jar包,它包含访问配置...
027-spring-ioc-三层架构组件管理介绍和jdbctemplate使用.mp4 028-spring-ioc-三层架构组件管理实战.mp4 029-spring-ioc-基于注解方式ioc配置.mp4 030-spring-ioc-扩展周期方法和作用域注解.mp4 031-spring-ioc-...
027-spring-ioc-三层架构组件管理介绍和jdbctemplate使用.mp4 028-spring-ioc-三层架构组件管理实战.mp4 029-spring-ioc-基于注解方式ioc配置.mp4 030-spring-ioc-扩展周期方法和作用域注解.mp4 031-spring-ioc-...
027-spring-ioc-三层架构组件管理介绍和jdbctemplate使用.mp4 028-spring-ioc-三层架构组件管理实战.mp4 029-spring-ioc-基于注解方式ioc配置.mp4 030-spring-ioc-扩展周期方法和作用域注解.mp4 031-spring-ioc-...
027-spring-ioc-三层架构组件管理介绍和jdbctemplate使用.mp4 028-spring-ioc-三层架构组件管理实战.mp4 029-spring-ioc-基于注解方式ioc配置.mp4 030-spring-ioc-扩展周期方法和作用域注解.mp4 031-spring-ioc-...
Java Spring代理模式AOP-IOC分析 一、代理模式概述 在软件设计中,代理模式是一种常用的设计模式。...本文对Java Spring代理模式AOP-IOC进行了分析和讨论,并提供了一个示例项目来演示如何使用Spring实现AOP和IOC。
Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...
Spring AOP 和 Spring IOC 是 Spring 框架的两个核心组件,它们对于任何基于 Java 的企业级应用开发都至关重要。Spring AOP(面向切面编程)允许开发者在不修改源代码的情况下,通过“切面”来插入新的行为或增强已...
Spring框架是Java开发中不可或缺的一部分,它以依赖注入(IoC)和面向切面编程(AOP)为核心,极大地简化了企业级应用的复杂性。本文将深入探讨这两个关键概念,以及如何在Spring中实现它们。 一、依赖注入(IoC) ...
在这个"spring-demo10-注解-IOC"的示例中,我们可以期待看到如何创建和配置带有注解的bean,如何使用 `@Autowired` 进行依赖注入,以及可能的AOP配置。通过查看源代码,我们可以学习到如何在实际项目中应用这些注解...
Java Spring 代理模式 AOP-IOC 结合 从给定的文件信息中,我们可以总结出以下知识点: 一、为什么需要代理模式 ...Spring 提供了一个强大的 AOP 框架和 IoC 容器,可以帮助我们轻松实现代理模式和 AOP。
资料包含spring-iocdi-annotation-document,iocdi-annotation-mvc,iocdi-xml-extend,iocdi-annotation-extend proxy,jdkproxy-transaction,jdkproxy-salary,day02-itheima11-spring-08-cglibproxy,day02-itheima11-...
spring Ioc与Aop依赖的jar包,基本用到的都有,包括aopalliance-1.0、aspectjweaver-1.6.9、commons-logging-1.2、log4j-1.2.17、spring-aop-3.2.13.RELEASE、spring-beans-3.2.13.RELEASE、spring-context-3.2.13....
Spring的核心特性是控制反转(IOC)和面向切面编程(AOP)。它提供了一个全面的编程和配置模型,可以用于构建各种类型的Java应用程序,包括Web应用。 1. **Spring介绍** - **侵入式概念**:传统Java EE应用中,...
spring version: 5.0.0; jdk: 1.8 IOC大致调用顺序(IOC调用的AOP标签解析)
Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)为核心,极大地简化了软件组件的管理。在这个名为“Spring---IOC实现”的项目中,我们将深入探讨Spring如何通过IoC实现对应用...
Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(IOC)和面向切面编程(AOP)功能闻名。在本示例中,我们将深入理解这两个核心概念。 **依赖注入(IOC)** 依赖注入(Inversion of Control)是...
### Spring4 Ioc-Aop 知识点详解 #### 一、Spring框架简介 Spring是一个开源框架,旨在简化企业级应用开发。通过Spring框架,普通的JavaBean能够实现以往只有通过EJB才能完成的功能。Spring的核心特性包括轻量级、...
spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和...
Spring学习笔记,主要包括核心技术IOC和AOP