Spring - 通知(Advice)和顾问(Advisor)
来源:互联网 发布:国泰君安港股交易软件 编辑:程序博客网 时间:2024/05/18 05:01
【1】AOP (Aspect Oriented Programming 面向切面编程)
- 首先回顾基本术语:
(1)切面(Aspect)
切面泛指[交叉业务逻辑]。事务处理和日志处理可以理解为切面。常用的切面有通知(Advice)与顾问(Advisor)。实际就是对主业务逻辑的一种增强。
(2)织入(Weaving)
织入是指将切面代码插入到目标对象的过程。代理的invoke方法完成的工作,可以称为织入。
(3) 连接点(JoinPoint)
程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
连接点由两个信息确定:
方法(表示程序执行点,即-在哪个目标方法);相对点(表示方位,即-目标方法的什么位置,如调用前、后。。。)
每个类都拥有多个连接点.
例如 ArithmethicCalculator(本地测试类) 的所有方法实际上都是连接点,即连接点是程序类中客观存在的事务。
(4)切入点(PointCut)
切入点指切面具体织入的方法
注意:被标记为final的方法是不能作为连接点与切入点的。因为最终的是不能被修改的,不能被增强的。
类比:连接点相当于数据库中的记录,切点相当于查询条件。
切点和连接点不是一对一的关系,一个切点匹配多个连接点.
切点通过 org.springframework.aop.Pointcut 接口进行描述,它使用类和方法作为连接点的查询条件。
(5)目标对象(Target)
目标对象指将要被增强的对象。即包含主业务逻辑的类的对象。
(6)通知(Advice)
通知是切面的一种实现,可以完成简单的织入功能。通知定义了增强代码切入到目标代码的时间点,是目标方法执行之前执行,还是执行之后执行等。切入点定义切入的位置,通知定义切入的时间。
(7)顾问(Advisor)
顾问是切面的另一种实现,能够将通知以更为复杂的方式织入到目标对象中,是将通知包装为更复杂切面的装配器。
【2】Aspect
使用<aop:aspect>
配置时,
如果切面代码是自动注入的bean,那么<aop:aspect>
的ref属性直接写bean的注入名字就可以了!
<bean id="validateAspect" class="com.web.aop.impl.xml.ValidateAspect"></bean><!-- 配置验证切面 --> <aop:aspect ref="validateAspect" order="2" > <aop:before method="beforMethod" pointcut-ref="pointcut"/> </aop:aspect>
【3】Advisor
如,Spring中的事务应用:
<!-- *************2.配置事务属性 *********************--> <tx:advice id="txadvice" transaction-manager="transactionManager" > <tx:attributes> <!-- 根据方法名指定事务的属性 --> <tx:method name="purchase" propagation="REQUIRES_NEW" isolation="READ_COMMITTED" /> <tx:method name="*"/> </tx:attributes> </tx:advice> <!-- ***3.配置事务切入点,以及把事务切入点和事务属性关联起来 --> <aop:config> <aop:pointcut expression="execution(* com.web.xml.service.*.*(..))" id="txPointCut"/> <aop:advisor advice-ref="txadvice" pointcut-ref="txPointCut" /> </aop:config>
若<aop:advisor advice-ref="beanName" pointcut-ref="txPointCut" />
则该bean的class应为org.aopalliance.aop.Advice
类型
1、Adivisor是一种特殊的Aspect,Advisor代表spring中的Aspect
● <aop:advisor>
:用来定义只有一个通知和一个切入点的切面;
● <aop:aspect>
:用来定义切面,该切面可以包含多个切入点和通知,而且标签内部的通知和切入点定义是无序的;和advisor的区别就在此,advisor只包含一个通知和一个切入点。
- Spring - 通知(Advice)和顾问(Advisor)
- 顾问(Advisor),通知 advice ,注解Aspectj
- spring advice&pointcut&advisor
- 5.5 Spring的通知(Advice)
- Spring AOP : Advice 声明 (通知注解)
- Spring中的Advisor,Advice,Pointcut
- Spring中的Advisor,Advice,Pointcut
- spring aop 细说advice,advisor
- Spring AOP中定义切点(PointCut)和通知(Advice)
- Spring切面通知执行的顺序(Advice Order)
- spring的通知(advice)
- Spring中的Advisor,Advice,Pointcut,Advised
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Spring Aop中的advisor、advice、pointcut
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- tp3上传文件,源文件名保存,中文乱码问题
- Linux sed常用示例
- 国际化用的语言代码及名称
- 关于拦截器与过滤器使用场景、拦截器与过滤器的区别整理
- Eclipse Xml编译错误Referenced file contains errors - spring-beans-4.0.xsd
- Spring - 通知(Advice)和顾问(Advisor)
- jQuery事件触发
- Encoder-Decoder模型和Attention模型
- LINUX 设备驱动(完善 版(三))
- 计算机是如何启动的?
- Android 广播大全
- C++预处理详解
- APP版本升级,服务端API设计
- 2016.12.30【初中部 GDKOI】模拟赛B组