Spring Boot中使用AOP无需任何配置,仅需添加AOP相关依赖就可以开始使用了。
compile('org.springframework.boot:spring-boot-starter-aop:2.0.0.RELEASE')
以注解方式结合AOP实现MongoDB自动存储为例介绍AOP在Spring Boot中的使用。
Step 1:自定义注解
import java.lang.annotation.*;
/**
* 自定义注解,结合AOP实现MongoDB自动缓存
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
@Documented
public @interface MongoCache {
}
Step 2:使用@Aspect注解定义
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class MongoAspect {
private Logger logger = LoggerFactory.getLogger(MongoAspect.class);
@Pointcut(value = "@annotation(your.package.MongoCache)")
public void setJoinPoint(){}
//环绕通知:可以获取返回值
@Around(value = "setJoinPoint()")
public Object aroundMethod(ProceedingJoinPoint proceedingJoinPoint){
Object result = null;
try {
//前置通知
result = proceedingJoinPoint.proceed();
//返回通知
//存储至MongoDB
Object[] args = proceedingJoinPoint.getArgs();
logger.info("存储至MongoDB...");
} catch (Throwable e) {
//异常通知
logger.error(e.getLocalizedMessage(),e);
}
//后置通知
return result;
}
}
Step 3:在需要的方法上添加自定义注解
@RestController
public class HelloController {
@MongoCache
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}
简单几步就能通过自定义注解实现AOP处理了,当然示例中还有些细节没有展开(如:存储至MongoDB的内容)。
网友评论