- 浏览: 342123 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (212)
- spring (21)
- design pattern(java) (12)
- linux-shell (28)
- java-thread (20)
- java-collection (6)
- java-reflect (9)
- mysql (11)
- java-io (7)
- java-util&lang&io (3)
- algorithm (3)
- interview (2)
- tools-eclipse (2)
- tools-maven (1)
- web-script (1)
- java组建 (13)
- 博客收藏 (1)
- 架构设计与实践 (10)
- active-mq (6)
- java-jvm&性能&原理 (27)
- tomcat (2)
- flume (1)
- serialization (2)
- git (1)
- cache&redis (8)
- guava (1)
- zookeeper (3)
- socket&tcp&udp&http (6)
- test (1)
最新评论
-
bbls:
有用有用有用
java-jvm-jstack-(监视器和锁的概念) -
王新春:
小侠有点帅哦 写道此流怎么关闭新春这个实现 可以不关闭的,哈哈 ...
源码剖析之java.io.ByteArrayOutputStream -
小侠有点帅哦:
此流怎么关闭新春
源码剖析之java.io.ByteArrayOutputStream -
cumt168:
写的很好为什么初始化参数,年轻代-Xmn10M def new ...
jvm之内存申请过程分析 -
ronin47:
应该是跟共享域名思路差不多,根据cookie的key作判断
跨域:一种通过服务端解决跨域的实现
AOP词汇:
Joinpoint:在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。通俗的说就是加入切点的那个点.ProceedingJoinPoint
Advice:待织入的逻辑
前置通知(Before advice):在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。
后置通知(After returning advice):在某连接点正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。
异常通知(After throwing advice):在方法抛出异常退出时执行的通知。
最终通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
环绕通知(Around Advice):包围一个连接点的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它自己的返回值或抛出异常来结束执行。
继承结构:
使用方法:
Advisor:拥有Advice的接口
PointcutAdvisor:拥有切点逻辑Advisor
DefaultPointcutAdvisor:默认拥有匹配所有类和方法的pointcut 和 Advice 的实现
其他:
RegexpMethodPointcutAdvisor:需要加上完整的类名和方法名,例如:com.xw.methodname或com.*.methodname或.*methodname
NameMatchMethodPointcutAdvisor:只需要方法名,不用加类名:*methodname
切入点:
Pointcut:提供类层面(ClassFilter)和方法层面(MethodMatcher)的匹配逻辑
AOP代理:
Cglib2AopProxy:基于cglib实现的代理,核心:Enhancer
JdkDynamicAopProxy:基于jdk动态代理实现,核心接口:InvocationHandler
切面:
Aspect:是一个Pointcut 和 多个Advice的模块化逻辑单元
最后总结:
举例:
1、Spring AOP:自动代理(扫描切面配置)
这里无需再配置代理了,因为代理将会由 DefaultAdvisorAutoProxyCreator 自动生成。也就是说,这个类可以扫描所有的切面类,并为其自动生成代理。
2、Spring + AspectJ(基于注解:通过 AspectJ execution 表达式拦截方法)
类上面标注的 @Aspect 注解,这表明该类是一个 Aspect(其实就是 Advisor)。该类无需实现任何的接口,只需定义一个方法(方法叫什么名字都无所谓),只需在方法上标注 @Around 注解,在注解中使用了 AspectJ 切点表达式。方法的参数中包括一个 ProceedingJoinPoint 对象,它在 AOP 中称为 Joinpoint(连接点),可以通过该对象获取方法的任何信息,例如:方法名、参数等。
3、Spring + AspectJ(基于配置)
使用 <aop:config> 元素来进行 AOP 配置,在其子元素中配置切面,包括增强类型、目标方法、切点等信息。
无论您是不能使用注解,还是不愿意使用注解,Spring AOP 都能为您提供全方位的服务。
Joinpoint:在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。通俗的说就是加入切点的那个点.ProceedingJoinPoint
Advice:待织入的逻辑
前置通知(Before advice):在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。
后置通知(After returning advice):在某连接点正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。
异常通知(After throwing advice):在方法抛出异常退出时执行的通知。
最终通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
环绕通知(Around Advice):包围一个连接点的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它自己的返回值或抛出异常来结束执行。
继承结构:
使用方法:
Advisor:拥有Advice的接口
PointcutAdvisor:拥有切点逻辑Advisor
DefaultPointcutAdvisor:默认拥有匹配所有类和方法的pointcut 和 Advice 的实现
其他:
RegexpMethodPointcutAdvisor:需要加上完整的类名和方法名,例如:com.xw.methodname或com.*.methodname或.*methodname
NameMatchMethodPointcutAdvisor:只需要方法名,不用加类名:*methodname
切入点:
Pointcut:提供类层面(ClassFilter)和方法层面(MethodMatcher)的匹配逻辑
AOP代理:
Cglib2AopProxy:基于cglib实现的代理,核心:Enhancer
JdkDynamicAopProxy:基于jdk动态代理实现,核心接口:InvocationHandler
切面:
Aspect:是一个Pointcut 和 多个Advice的模块化逻辑单元
最后总结:
举例:
1、Spring AOP:自动代理(扫描切面配置)
<?xml version="1.0" encoding="UTF-8"?> <beans ...> ... <bean id="greetingAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="pattern" value="aop.demo.GreetingImpl.good.*"/> <property name="advice" ref="greetingAroundAdvice"/> </bean> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"> <property name="optimize" value="true"/> </bean> </beans>
这里无需再配置代理了,因为代理将会由 DefaultAdvisorAutoProxyCreator 自动生成。也就是说,这个类可以扫描所有的切面类,并为其自动生成代理。
2、Spring + AspectJ(基于注解:通过 AspectJ execution 表达式拦截方法)
@Aspect @Component public class GreetingAspect { @Around("execution(* aop.demo.GreetingImpl.*(..))") public Object around(ProceedingJoinPoint pjp) throws Throwable { before(); Object result = pjp.proceed(); after(); return result; } private void before() { System.out.println("Before"); } private void after() { System.out.println("After"); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <context:component-scan base-package="aop.demo"/> <aop:aspectj-autoproxy proxy-target-class="true"/> </beans>
类上面标注的 @Aspect 注解,这表明该类是一个 Aspect(其实就是 Advisor)。该类无需实现任何的接口,只需定义一个方法(方法叫什么名字都无所谓),只需在方法上标注 @Around 注解,在注解中使用了 AspectJ 切点表达式。方法的参数中包括一个 ProceedingJoinPoint 对象,它在 AOP 中称为 Joinpoint(连接点),可以通过该对象获取方法的任何信息,例如:方法名、参数等。
3、Spring + AspectJ(基于配置)
<?xml version="1.0" encoding="UTF-8"?> <beans ..."> <bean id="greetingImpl" class="aop.demo.GreetingImpl"/> <bean id="greetingAspect" class="aop.demo.GreetingAspect"/> <aop:config> <aop:aspect ref="greetingAspect"> <aop:around method="around" pointcut="execution(* aop.demo.GreetingImpl.*(..))"/> </aop:aspect> </aop:config> </beans>
使用 <aop:config> 元素来进行 AOP 配置,在其子元素中配置切面,包括增强类型、目标方法、切点等信息。
无论您是不能使用注解,还是不愿意使用注解,Spring AOP 都能为您提供全方位的服务。
发表评论
-
mvc-HandlerMapping
2017-06-03 23:13 841HandlerMapping:定义了web请求映射和处 ... -
spring-transaction-basic
2016-12-26 19:18 410Spring的事务本身是基于AOP的 AOP代理自 ... -
spring-transaction-propagation
2016-11-25 21:00 852Spring 事务:是spring 通过 aop实现的一套 ... -
spring bean & id
2016-11-25 17:57 459首先澄清一个概念: 同名bean:多个bean ... -
spring 父子容器
2016-11-25 17:11 3650特殊说明: ContextLoaderListe ... -
spring-mvc-基础
2016-09-26 15:03 390核心入口功能定位: HttpServletBean:完成的是& ... -
spring-mvc 学习资料
2016-09-20 15:42 358http://docs.spring.io/spring-fr ... -
spring-aop-DefaultAdvisorAutoProxyCreator
2016-08-16 19:50 469ProxyFactory:手工编程实现AOP,编程式 添加ad ... -
spring-扩展点-BeanFactoryPostProcessor
2016-06-15 18:15 6010BeanFactoryPostProcessor:允许自定 ... -
spring-扩展点-BeanPostProcessor
2016-06-14 15:02 1559理解spring中一个bean的初始化过程非常重要,很多基础功 ... -
spring-扩展点-namespacehandler(Spring自定义标签)
2016-05-27 11:31 2213在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直 ... -
spring 资源文件
2015-04-03 00:07 148【转载】 非原创 SpringMVC访问静态资源的三种方式 ... -
spring-master-slave-commondao
2014-07-19 14:32 2252互联网的web项目,都有个特点:请求的并发量高,其中请求最耗时 ... -
spring-jdbc-RoutingDataSource
2014-07-11 17:33 5465spring jdbc 提供了抽象类AbstractRouti ... -
spring-aop-ProxyFactoryBean 源码分析
2014-06-13 19:10 2033在阅读本篇之前,请先阅读http://wangxinchun. ... -
spring-aop-ProxyFactory 源码分析
2014-06-13 02:22 4778spring 提供的编程式aop实现,即通过 ProxyFac ... -
spring-aop-aspectj(Schema)-case
2014-05-31 15:50 1090基于Schema 配置切面: 1、切点定义的语言依然是Aspe ... -
spring-aop-aspectj-case
2014-05-31 14:51 1371AOP概念:面向切面编程。 spring 集成AOP: 1、 ... -
spring-rpc-case
2014-05-17 23:34 1096spring 提供了基本的基于http协议的rpc,同时提供了 ... -
spring-mvc-case
2014-05-10 23:50 1195spring mvc 是当前java比较流行的一种mvc架构, ...
相关推荐
Spring AOP的关键概念包括: - 切面(Aspect):切面是关注点的模块化,比如日志、事务管理等。在Spring AOP中,切面可以通过注解或XML配置来定义。 - 连接点(Join Point):连接点是程序执行过程中的一个特定点,...
首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或关注点,如日志记录。切点(Pointcut)定义了在何处应用切面,通常通过方法签名或注解来指定。通知(Advice)是切面实际...
首先,我们需要理解AOP的基本概念。切面(Aspect)是包含关注点的模块化单元,它封装了跨越多个对象的行为或责任。通知(Advice)是切面在特定连接点(Join Point)执行的代码,例如方法调用前、后或异常发生时。...
首先,我们需要理解AOP的基本概念。AOP是一种编程范式,旨在将那些分散在代码各处的、与核心业务逻辑无关但又必须执行的操作(如上述的事务管理和日志记录)抽取出来,形成独立的模块,称为“切面”。这样做的好处是...
Spring AOP允许开发者定义切点(Pointcut)、通知(Advice)、切面(Aspect)等概念,以实现如日志记录、事务管理等横切关注点。与AspectJ不同,Spring AOP默认使用代理模式(如JDK动态代理或CGLIB),但在配置后也...
首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它包含了通知(Advice)和切点(Pointcut)。通知是在特定的连接点(Join Point)执行的代码,而切点则是定义这些连接点的规则,通常是一个方法调用。...
首先,让我们理解AOP的基本概念。AOP是一种编程范式,它允许程序员定义“切面”,这些切面封装了特定的职责,例如日志记录或事务管理。在运行时,切面会与主业务逻辑“织入”在一起,以透明地执行其任务。 在Spring...
Spring AOP,全称Aspect-Oriented Programming,是Spring框架中的一个重要组成部分,它引入了面向切面编程的概念,使得开发者可以方便地实现横切关注点,如日志、事务管理等,而无需侵入到业务代码中。在这个例子中...
1. **AOP的基本概念** - **切面(Aspect)**:AOP的核心单元,它封装了横切关注点,包括通知(advice)、切入点(pointcut)和织入(weaving)。 - **通知(Advice)**:在特定连接点上执行的代码,如方法调用前、...
Spring AOP主要涉及以下几个关键概念: 1. 切面(Aspect):切面是关注点的模块化,比如日志、事务管理等。在Spring中,切面可以由一个或多个通知(advice)和一个切入点(pointcut)定义。 2. 通知(Advice):这...
一、AOP基本概念 AOP是一种编程范式,旨在改善程序结构,通过将横切关注点(如日志、事务管理等)与业务逻辑分离,提高代码的可维护性和可重用性。在Spring中,AOP主要通过两种方式实现:一种是基于XML配置,另一种...
一、AOP的基本概念 AOP的核心是切面(Aspect),它封装了横切关注点,如日志记录、事务管理等。在Spring AOP中,切面由通知(Advice)、连接点(Join Point)、切点(Pointcut)、引入(Introduction)和织入...
首先,我们需要了解AOP的基本概念。面向切面编程(Aspect Oriented Programming,AOP)是一种编程范式,旨在将分散在各处的交叉关注点(例如日志、事务管理)模块化,使得代码更加清晰,更易于维护。Spring AOP通过...
首先,理解Spring AOP的基本概念至关重要。AOP是一种编程范式,它允许程序员定义“切面”,这些切面可以包含业务逻辑的多个部分,如方法调用前后的代码。在Spring框架中,切面通过定义“通知”(advice)和“切入点...
Spring以其“控制反转”(IoC)和“面向切面编程”(AOP)的概念,极大地简化了企业级应用的开发。在4.1.6版本中,Spring提供了许多重要的功能和改进。 1. **控制反转(IoC)**:IoC是Spring的核心特性,它将对象的...
1. AOP基本概念 - 切面(Aspect):AOP的核心概念,它封装了关注点,如日志、事务管理等。 - 连接点(Join Point):程序执行过程中可以插入切面的特定点,如方法调用、异常抛出等。 - 切入点(Pointcut):定义...
- `spring-core-5.2.6.RELEASE.jar`:Spring的核心工具集,包括IoC和基本的AOP支持。 - `spring-expression-5.2.6.RELEASE.jar`:Spring表达式语言(SpEL),用于在运行时查询和操作对象图。 - `spring-jdbc-5.2.6....
在理解该电子书涉及的知识点之前,我们需要先了解Spring AOP的基本概念和组件。 首先,Spring AOP的核心概念包括: 1. 通知(Advice):这是AOP术语中最核心的概念。通知定义了切面应用到目标对象时所要执行的行为...
一、Spring AOP基本概念 1. 切面(Aspect):切面是关注点的模块化,它包含了横切关注点(如事务管理)的代码和元数据。 2. 连接点(Join Point):程序执行中的某个特定点,例如方法调用或异常处理。 3. 切入点...