Spring4——基于注解形式的aop实现、基于Schema形式的aop实现

基于注解形式的aop实现
1.jar
与实现接口方式的一致。
2.配置
将业务类、通知类纳入IOC容器。
开启注解对AOP的支持。

使用@Componet注解需要扫描器。


3.编写
通知类
//给予注解实现aop
//加此注解后此类是通知
@Aspect
public class LogAspectAnnotation {
    //添加注解使得方法变成前置通知方法
    @Before("execution(public * addStudent(..))") //属性:定义切点
    public void logBeforeAnno(){
        System.out.println("注解形式【前置通知】...");
    }


    //注解实现后置通知
    @AfterReturning("execution(public * addStudent(..))") //属性:定义切点
    public void logAfterAnno(){
        System.out.println("注解形式【后置通知】...");
    }
}

注意:扫描器会将指定包中的@Componet, @Service, @Respository, @Controller   修饰的类产生的对象添加到xml中。

 
*通过注解形式实现的aop,获取目标对象的信息,要通过对象JoinPoint。
注解形式返回值问题:
声明返回值的参数名。
//注解实现后置通知
@AfterReturning(pointcut = "execution(public * org.ghl.service.impl.StudentServiceImpl.addStudent(..))",returning = "returningValue") //属性:定义切点
public void logAfterAnno(JoinPoint jp,Object returningValue){
    System.out.println("注解形式【后置通知】...:目标对象:"+jp.getTarget()+",方法名:"+jp.getSignature().getName()+",参数列表:"+ Arrays.toString(jp.getArgs())+",返回值:"+returningValue);
}

 

*若报错:IllegalArgumentException: 参数异常。  

 

*注解形式异常通知,若想捕获指定的异常,则用第二个参数e 

//异常通知,若想捕获指定的异常,则用第二个参数
@AfterThrowing(value = "execution(public *  org.ghl.service.impl.StudentServiceImpl.addStudent(..))",throwing = "e")
public void logExceptionAnno(JoinPoint jp,NullPointerException e){
    System.out.println("《注解形式【异常通知】》:e:"+e.getMessage());
}

 

基于Schema形式的aop实现(通过配置实现aop)
(1)编写一个普通类;
(2)将该类通过配置变成一个“通知”。






    
    
    
    
    
  
    
    
        
        
        
        
        
    

 

获取目标对象时:
注解、Schema形式:JoinPoint
接口:Object returnValue, Method method, Object[] args, Object target
 

你可能感兴趣的:(Spring4——基于注解形式的aop实现、基于Schema形式的aop实现)