Advisors
1、advisor就像一个小的自包含的方面,只有一个advice。
2、切面自身通过一个bean表示,并且必须实现某个advice接口,同时,advisor也可以很好的利用AspectJ的切入点表达式(后面介绍AspectJ实现AOP时会介绍到AspectJ的切入点表达式)。
3、Spring通过配置文件中<aop:advisor>元素支持advisor,实际使用中,大多数情况下它会和transactional advice(事物相关的advice)配合使用(也可以有其他使用方式,根据项目或者工程的实际情况来决定)。
4、为了定义一个advisor的优先级以便让advice可以有序,可以使用order属性来定义advisor的顺序。
advisor的配置(<tx:advice>是对于事物的相关声明,通过这种方式使用advisor,这种方式是在使用Spring事物的控制时,经常使用的方式)

案例:(没有讲解advisor的案例,讲解了环绕通知的一个案例,适用场景:统计逻辑功能方法的调用次数,例如统计某方法调用3次,就不让调用了)
步骤1:
public class ServiceFunction {
public void print1(){
System.out.println("逻辑功能方法1执行了");
}
public void print2(){
System.out.println("逻辑功能方法2执行了");
throw new RuntimeException();
}
}
步骤2:
public class AspectFunction {
private int max_times;
public int getMax_times() {
return max_times;
}
public void setMax_times(int max_times) {
this.max_times = max_times;
}
public Object aspectFunction(ProceedingJoinPoint pjp) throws Throwable{
int num_times=0;
do{
num_times++;
try{
System.out.println(num_times+"次");
return pjp.proceed();
}catch(RuntimeException e){
}
}while(num_times<=max_times);
System.out.println("方法总共执行了"+num_times+"次");
return null;
}
}
步骤3:


想到的业务场景为密码账号输入错误超过五次就不能再次输入。
使用到事物控制的时候经常使用的方式 aop scheme下面 <aop:config> <aop:pointcut id="businessService" expression="execution(* com.xyz.myapp.service..(..))"/> <aop:advisor pointcut-ref="businessService" advice-ref="tx-advice"/> </aop:config> <tx:advice id="tx-advice"> <tx:attributes> <tx:method name="*" propagation="REQUIRED"> </tx:attributes> </tx:advice>
和transaction配合使用
环绕通知
这种Advisor方式,在真实的业务场景中,如果需要对于某个方法统计执行次数,或者在尝试执行3次失败后就不会再尝试(例如,获取prpo的接口信息时可以使用这个)
Advisors
advisor 就像一个小的自包含的方面,只有一个advice
切面自身通过一个bean表示,并且必须实现某个advice接口,同事,advisor也可以很好的额利用AspectJ的切入点表达式
Spring通过配置文件中<aop:advisor>元素支持advisor, 实际使用中,大多数情况下他会和transactional advice配合使用
为了定义一个advisor的优先级以便让advice可以有序,可以使用order属性来定义advisor的顺序
<aop:advisor>配合transactional advice使用
advisors配置
Advisors
1、advisor就像一个小的自包含的方面,只有一个advice。
2、切面自身通过一个bean表示,并且必须实现某个advice接口,同时,advisor也可以很好的利用AspectJ的切入点表达式(后面介绍AspectJ实现AOP时会介绍到AspectJ的切入点表达式)。
3、Spring通过配置文件中<aop:advisor>元素支持advisor,实际使用中,大多数情况下它会和transactional advice(事物相关的advice)配合使用(也可以有其他使用方式,根据项目或者工程的实际情况来决定)。
4、为了定义一个advisor的优先级以便让advice可以有序,可以使用order属性来定义advisor的顺序。
advisor的配置(<tx:advice>是对于事物的相关声明,通过这种方式使用advisor,这种方式是在使用Spring事物的控制时,经常使用的方式)

案例:(没有讲解advisor的案例,讲解了环绕通知的一个案例,适用场景:统计逻辑功能方法的调用次数,例如统计某方法调用3次,就不让调用了)
步骤1:
public class ServiceFunction {
public void print1(){
System.out.println("逻辑功能方法1执行了");
}
public void print2(){
System.out.println("逻辑功能方法2执行了");
throw new RuntimeException();
}
}
步骤2:
public class AspectFunction {
private int max_times;
public int getMax_times() {
return max_times;
}
public void setMax_times(int max_times) {
this.max_times = max_times;
}
public Object aspectFunction(ProceedingJoinPoint pjp) throws Throwable{
int num_times=0;
do{
num_times++;
try{
System.out.println(num_times+"次");
return pjp.proceed();
}catch(RuntimeException e){
}
}while(num_times<=max_times);
System.out.println("方法总共执行了"+num_times+"次");
return null;
}
}
步骤3:

什么是Advisors
Advisors
spring中<aop:advisor>配合transactional advice使用(大多数情况下)
Advisors简介
Schema-based Aop小结
Advisors 还是不太懂。
Advisors配置
Advisors
Advisors 通常和事务相关的advice 配合使用
Advisors控制调用次数
schema-based AOP小结
Advisors:
advisor
advisors配置
advisors
测试类
...
Service
配置
1