AOP概念:
面向切面(方面)编程,是对所有对象或者是一类对象编程,核心是(在不增加代码的基础上,还增加新功能);
将通知配置到目标对象,生成代理对象。
AOP术语:
1.通知:切面的实际实现,他通知系统新的行为。如在日志通知包含了实现日志功能的代码,如向日志文件写日志。通知在连接点插入到应用系统中。
2.连接点:应用程序执行过程中插入切面的地点,可以是方法调用,异常抛出,或者要修改的字段。
3.切入点:定义了通知应该应用在哪些连接点,通知可以应用到AOP框架支持的任何连接点。
4.引入:为类添加新方法和属性。
5.目标对象:被通知的对象。既可以是你编写的类也可以是第三方类
6.代理对象:将通知应用到目标对象后创建的对象,应用系统的其他部分不用为了支持代理对象而改变。
7.切面:要实现的交叉功能,是系统模块化的一个切面或领域。如日志记录。
8.织入:将切面应用到目标对象从而创建一个新代理对象的过程。织入发生在目标对象生命周期的多个点上:
编译期:切面在目标对象编译时织入.这需要一个特殊的编译器.
类装载期:切面在目标对象被载入JVM时织入.这需要一个特殊的类载入器.
运行期:切面在应用系统运行时织入.
AOP的5种通知类型:
前置通知:在方法外部调用,方法调用前调用的方法。实现接口:org.springframework.aop.MethodBeforeAdvice
后置通知:在方法外部调用,方法调用后调用的方法。实现接口:Org.springframework.aop.AfterReturningAdvice
环绕通知:在方法内部调用,刚进入方法内部时、方法结束时调用的方法,在前置通知方法后,后置通知方法前。实现接口org.aopalliance.intercept.MethodInterceptor
异常通知:在方法跑出异常时,调用的方法。实现接口:Org.springframework.aop.ThrowsAdvice
引入通知:若不用引入通知,则所有的连接点都是切入点。用了引入通知后,可以过滤连接点,让部分连接点成为切入点。实现接口:org.springframework.aop.support.NameMatchMethodPointcutAdvisor
spring AOP:只支持方法连接点,不提供属性接入点,所以类有设置属性的方法就可以了,可以没有属性
spring的aop中,当你通过代理对象去实现aop的时候,获取的ProxyFactoryBean是什么类型?
答: 返回的是一个代理对象,如果目标对象实现了接口,则spring使用jdk 动态代理技术,如果目标对象没有实现接口,则spring使用CGLIB技术.
前置通知实现:
1.编写目标对象
<bean id="obj" class="hsp.spring.bean.Obj">
<property name="name" value="obj"/>
</bean>
2.编写前置通知
实现org.springframework.aop.MethodBeforeAdvice接口的before方法
3.配置applicationContext.xml
将通知配置到applicationContext.xml中
<bean id="myMethodBeforeAdvice" class="hsp.spring.app.MyMethodBeforeAdvice"/>
通知织入到目标对象,配置目标对象及其实现的接口、织入通知
<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 目标对象:配置被代理的对象 -->
<property name="target" ref="obj"/>
<!-- 配置代理接口 -->
<property name="proxyInterfaces">
<value>hsp.spring.bean.ObjInter</value>
</property>
<!-- 织入:把通知织入到代理对象 -->
<property name="interceptorNames">
<!--list:当通知多个时使用,只织入一个通知可以省略-->
<list>
<value>myMethodBeforeAdvice</value>
</list>
</property>
</bean>
环绕通知实现:
1.编写目标对象
<bean id="obj" class="hsp.spring.bean.Obj">
<property name="name" value="obj"/>
</bean>
2.编写环绕通知
实现org.aopalliance.intercept.MethodInterceptor接口的invoke方法
3.配置applicationContext.xml
将通知配置到applicationContext.xml中
<bean id="myMethodInterceptor" class="hsp.spring.app.MyMethodInterceptor"/>
通知织入到目标对象,配置目标对象及其实现的接口、织入通知
<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 目标对象:配置被代理的对象 -->
<property name="target" ref="obj"/>
<!-- 配置代理接口 -->
<property name="proxyInterfaces">
<value>hsp.spring.bean.ObjInter</value>
</property>
<!-- 织入:把通知织入到代理对象 -->
<property name="interceptorNames">
<value>myMethodInterceptor</value>
</property>
</bean>
注意:在环绕通知的实现方法中,若不执行MethodInvocation.proceed()方法,则程序从环绕通知结束终止
后置通知实现:
1.编写目标对象
<bean id="obj" class="hsp.spring.bean.Obj">
<property name="name" value="obj"/>
</bean>
2.编写后置通知
实现org.springframework.aop.AfterReturningAdvice接口的 AfterReturningAdvice 方法
3.配置applicationContext.xml
将通知配置到applicationContext.xml中
<bean id="myAfterReturningAdvice" class="hsp.spring.app.MyAfterReturningAdvice"/>
通知织入到目标对象,配置目标对象及其实现的接口、织入通知
<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 目标对象:配置被代理的对象 -->
<property name="target" ref="obj"/>
<!-- 配置代理接口 -->
<property name="proxyInterfaces">
<value>hsp.spring.bean.ObjInter</value>
</property>
<!-- 织入:把通知织入到代理对象 -->
<property name="interceptorNames">
<value>myAfterReturningAdvice</value>
</property>
</bean>
异常通知实现:
1.编写目标对象
<bean id="obj" class="hsp.spring.bean.Obj">
<property name="name" value="obj"/>
</bean>
2.编写异常通知
实现org.springframework.aop.ThrowsAdvice接口,这个接口只有标识,没有方法。可以实现public void afterThrowing(Exception ex)。其他方法可参照Spring API
3.配置applicationContext.xml
将通知配置到applicationContext.xml中
<bean id="myThrowAdvice" class="hsp.spring.app.MyThrowAdvice"/>
通知织入到目标对象,配置目标对象及其实现的接口、织入通知
<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 目标对象:配置被代理的对象 -->
<property name="target" ref="obj"/>
<!-- 配置代理接口 -->
<property name="proxyInterfaces">
<value>hsp.spring.bean.ObjInter</value>
</property>
<!-- 织入:把通知织入到代理对象 -->
<property name="interceptorNames">
<value>myThrowAdvice</value>
</property>
</bean>
切入通知实现:
切入通知不需要编写java代码,只需要配置applicationContext.xml。有选择的将连接点变成切入点(默认连接点全部是切入点)
以前置通知为例:
目标对象配置到applicaitonContext.xml中
<bean id="obj" class="hsp.spring.bean.Obj">
<property name="name" value="obj"/>
</bean>
将前置通知配置到applicationContext.xml中
<bean id="myMethodBeforeAdvice" class="hsp.spring.app.MyMethodBeforeAdvice"/>
切入通知配置,给前置通知加上过滤器,此时只有mappedNames中的方法,才会变成切入点
<bean id="myMethodBeforeAdviceFilter" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice" ref="myMethodBeforeAdvice"/>
<property name="mappedNames">
<value>sayHello</value>
</property>
</bean>
<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 目标对象:配置被代理的对象 -->
<property name="target" ref="obj"/>
<!-- 配置代理接口 -->
<property name="proxyInterfaces">
<value>hsp.spring.bean.ObjInter</value>
</property>
<!-- 织入:把通知织入到代理对象,此时里面的值,为加上过滤器之后的bean id -->
<property name="interceptorNames">
<value>myMethodBeforeAdviceFilter</value>
</property>
</bean>
分享到:
相关推荐
在本资源"spring aop简单示例.rar"中,我们可以预期包含以下关键知识点: 1. **切面(Aspect)**:切面是AOP的核心概念,它封装了横切关注点,包括通知(Advice)和切入点(Pointcut)。通知定义了在何时何地执行...
在这个“Spring AOP 1.0示例”中,我们重点关注如何在实际项目中应用这一特性。 首先,我们需要了解AOP的基本概念。AOP的核心思想是将那些影响多个类的公共行为(如日志记录)抽取出来,形成独立的模块,称为切面...
下面是一个简单的`LogProfilter`类和`applicationContext-aop.xml`配置的示例: ```java // LogProfilter.java public class LogProfilter { @Before("execution(* com.example.service.*.*(..))") public void ...
在这个"Spring AOP简单示例"中,我们将深入探讨这五个关键元素,并通过XML配置来实现它们。 首先,**切面(Aspect)**是关注点的模块化,这些关注点定义了跨越多个对象的行为或责任。在Spring AOP中,切面可以是...
在这个"spring aop API示例"中,我们将深入探讨如何利用Spring AOP的四种通知类型:Before、After、AfterThrowing和Around,以及它们在实际开发中的应用。 1. **Before通知**: 在方法执行前触发,可以用来执行...
现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...
在本示例中,我们将深入探讨Spring框架2.5.6版本中的面向切面编程(AOP)概念。Spring AOP是Spring框架的核心组件之一,它允许开发者在不修改源代码的情况下,对程序进行横切关注点(如日志、事务管理、性能监控等)...
在本文中,我们将深入探讨Spring AOP的基本概念、工作原理以及如何通过一个简单的例子来实现它。 AOP的核心概念包括切面(Aspect)、连接点(Join Point)、通知(Advice)、引入(Introduction)、目标对象...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要组成部分。它提供了一种模块化和声明式的方式来处理系统中的交叉关注点,如日志、性能监控、安全性、事务管理等。通过AOP,...
Spring AOP 简单入门示例 AOP(Aspect-Oriented Programming),即面向方面编程,是一种编程范式。AOP 是 OOP 的补充,它将系统中的横切性关注点模块化,并将其与业务逻辑分离。 在 Spring 中,AOP 是通过使用 ...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...
**Spring AOP示例** 以入门级的`advice`为例,我们可能有一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect { @Pointcut("execution(* com.example.service.*.*(..))") public void ...
`SpringAop.ppt`文件很可能包含了一个详细的讲解,涵盖了Spring AOP的基本概念、配置方式、使用注解声明切面、基于XML的配置以及如何自定义切面。PPT通常会通过图表、代码示例和流程图来帮助理解复杂的概念,使得...
在SLT-Spring-AOP这个项目中,你可以找到具体的实现示例,包括如何定义切面、通知和切入点表达式,以及如何在业务代码中应用这些概念。通过对该项目的深入学习,你将能够更好地理解和掌握Spring AOP的实战应用。
在本示例中,我们将深入探讨如何利用Spring AOP实现简单的权限验证。 首先,AOP的核心概念是切面(Aspect),它封装了横切关注点,比如日志、事务管理、权限验证等。在Spring AOP中,切面通过通知(Advice)来定义...
标题中的"aop例子aop例子"表明我们将探讨Spring AOP的实践应用。Spring是Java领域中最流行的框架之一,它提供了对AOP的强大支持,使得我们可以方便地创建和使用切面。 描述中的"自己写的aop代理spring"意味着我们将...
在这个"SpringAOP的例子"中,我们将深入探讨如何在Eclipse环境下利用Spring AOP和动态代理来实现这些功能。 首先,让我们理解什么是AOP。AOP是一种编程范式,旨在减少代码的重复性和增强可维护性。在传统的OOP中,...
接下来,我们通过一个简单的Spring AOP示例来加深对上述概念的理解。假设我们需要在调用某个公共方法前记录日志,我们可以定义一个`BeforeAdvice`,并在目标方法上应用此通知。 ```java package com.example.aop; ...
在Spring AOP(面向切面编程)中,自定义切面是实现业务逻辑解耦、增强代码可维护性的重要手段。AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。...
**Spring AOP 实例** Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员在不修改源代码的情况下,对程序的行为进行统一管理。AOP的主要目的是解耦,将关注点分离,比如日志、事务管理、性能监控...