这篇介绍的是最为常见的切面编程

首先介绍的是通过注解@Aspect来配置AOP类

@Component
@Aspect
public class Acsep {
	
	//定义切入点
	@Pointcut("execution(* com.test.*.*(..))")//切面公式
	public void aspect(){	}
	
	//执行方法之前
	@Before("aspect()")
	public void before(JoinPoint joinPoint) throws Exception{
		System.out.println("执行方法开始");
	}
	
	//执行方法之后
	@After("aspect()")
	public void after(JoinPoint joinPoint){
		System.out.println("执行方法之后");
	}
	
	//环绕通知
	@Around("aspect()")
	public void around(JoinPoint joinPoint){
			try {
				System.out.println("执行方法之前"+joinPoint.getArgs());
				Object aaa =((ProceedingJoinPoint) joinPoint).proceed();
				System.out.println("执行方法之后"+aaa);
			} catch (Throwable e) {
				e.printStackTrace();
			}
	}
	
	//配置后置返回通知
	@AfterReturning("aspect()")
	public void afterReturn(JoinPoint joinPoint){
		System.out.println("在after后增强处理");
	}
	
	//配置抛出异常后通知
	@AfterThrowing(pointcut="aspect()", throwing="ex")
	public void afterThrow(JoinPoint joinPoint, Exception ex){
		System.out.println("异常处理");
	}
}

其次可以配置XML的方式进行AOP


    
  
      
    
        
      
      
      
      
      
    
  

类为

public class WebAcsep {
	
	public void doBefore(JoinPoint jp){
	        System.out.println("===========执行前置通知============");
	}   

	public void doAfter(JoinPoint jp){
	        System.out.println("===========执行最终通知============");
	}
}

还有一种利用自定义注解去切,这种使用灵活,我一般在开发中使用的比较多

首先自定义注解

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DemoPro{
	
}

然后去配置XML

 
  
    
         
      
      
      
    
  

这样只要给方法加上定义的注解,会自动切

 @DemoPro
 public void Test(){
    System.out.println("逻辑");
 }

比如说有的类需要加入特定的日志,可以按照此方法使用。在需要特定日志的方法加入注解。