Annotation 实现 AOP

//注解实体类
package com.trip.demo;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface SMSAndMailSender {
  /*短信模板String格式化串*/
  String value() default "";

  String smsContent() default "";

  String mailContent() default "";
  /*是否激活发送功能*/
  boolean isActive() default true;
  /*主题*/
  String subject() default "";
}


//切面类   在所有标记了@SMSAndMailSender的方法中切入
@Aspect
@Component("smsAndMailSenderMonitor")
public class SMSAndMailSenderMonitor implements Ordered{

private Logger logger = LoggerFactory.getLogger(SMSAndMailSenderMonitor.class);

/**
* @param joinPoint
* @param result
*/
@AfterReturning(value="@annotation(SMSAndMailSender)", returning="result")//有注解标记的方法,执行该后置返回
public void afterReturning(JoinPoint joinPoint , Object result//注解标注的方法返回值) {
  MethodSignature ms = (MethodSignature) joinPoint.getSignature();
  Method method = ms.getMethod();
  boolean active = method.getAnnotation(SMSAndMailSender.class).isActive();
  if (!active) {
    return;
  }
  String smsContent = method.getAnnotation(SMSAndMailSender.class).smsContent();
  String mailContent = method.getAnnotation(SMSAndMailSender.class).mailContent();
  String subject = method.getAnnotation(SMSAndMailSender.class).subject();

 }

@Around(value="@annotation(SMSAndMailSender)")

public void proceed(ProceedingJoinPoint point,SMSAndMailSender smsAndMailSender){

    xxxx

  return point.proceed;

}

/**
* 在抛出异常时使用
* @param joinPoint
* @param ex
*/
@AfterThrowing(value="@annotation(SMSAndMailSender)",throwing = "ex")
public void afterThrowing(JoinPoint joinPoint, Throwable ex//注解标注的方法抛出的异常) {
  MethodSignature ms = (MethodSignature) joinPoint.getSignature();
  Method method = ms.getMethod();
  String subject = method.getAnnotation(SMSAndMailSender.class).subject();
}

  

  // 优先级高(数值最小)优先级低(竖直最大)

  @Override

  public int getOrder(){

    return  0;  

  }

  

猜你喜欢

转载自www.cnblogs.com/yanghuhu/p/12802435.html
今日推荐