大家好,我叫【坨坨】,找我爸爸打游戏,你得先问问我,不然我可能会汪汪朝你叫。
/**
* 我的管辖范围是apis下的请求
*/
@Pointcut("execution(public * com.example.web.apis..*.*(..))")
public void watchingYou() {
}
我在爸爸身上做了标记【@Daddy】,因为这个家伙回家比较晚,只能在晚上九点半下班到睡前陪你们打游戏了。
@RequestMapping("papa")
@Daddy(gameTime = "2130-2300")
public String papa() {
return "是时候展现真正的技术了。。。";
}
等你一找我爸打游戏,我得先看看你找的是不是我爸,再帮你查查我爸行程,我妈状态。这里的情况就很复杂了,我在这不一一列举了。
@Component
@Aspect
public class TuoTuo {
/**
* 我的管辖范围是apis下的请求
*/
@Pointcut("execution(public * com.example.web.apis..*.*(..))")
public void watchingYou() {
}
@Around("watchingYou()")
public Object whenIn(ProceedingJoinPoint joinPoint) throws Throwable{
Daddy approved = ((MethodSignature) joinPoint.getSignature()).getMethod().getAnnotation(Daddy.class);
if (approved != null) {
String gameTime = approved.gameTime();
if (!canPlayWithYou(gameTime)) {
return "妈妈暴走中," + approved.gameTime() + "再来约";
}
}
return joinPoint.proceed();
}
/**
* @param gameTime
* @return
*/
private boolean canPlayWithYou(String gameTime) {
System.out.println("游戏时间为:" + gameTime);
return new Random().nextBoolean();
}
}
结果大概就是
----------------------------------------------分割线------------------------------------------------
言归正传,注解可能本身没有太多的实际功能。说到底他只是个标签。只有当一个功能,去识别这个标签,并赋予他相应的功能权限时,注解才有了他的意义。当然,这个被注解标记的模块,如果超出了识别注解的范围,那也就变得毫无意义了。