引入pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
自定義注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Xxxano{
}
配置切面
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
@Aspect
@Component
@Slf4j
public class XxxanoAOP {
@Autowired
private BizService bizService;
@Pointcut("execution(* com.xx.xxxx.controller..*Controller.*(..)) &&@annotation(com.xx.xxxx.aop.Xxxano)")
public void pointcut() {
}
@Around("pointcut()")
@SneakyThrows
public Object arround(ProceedingJoinPoint pjp) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
MethodSignature signature = (MethodSignature) pjp.getSignature();
Method method = signature.getMethod();
String methodName = method.getName();
Object[] args = pjp.getArgs();
log.info("{}.{} , param : {}"
, method.getDeclaringClass().getName()
, methodName
, args);
String head = request.getHeader("head");
Xxxx x= bizService.selectXxxxById(head);
//get傳值
XxxxDTO attr = (XxxxDTO)request.getAttribute("attr");
attr.setAaa("1111");
request.setAttribute("attr",attr);
//post 傳值
LinkedHashMap<String, Object> param = (LinkedHashMap<String, Object>) args[0];
if (param.size() > 2) {
return R.error("參數(shù)字段過多");
}
param.put("time", LocalDateTime.now().toString());
Map<String,String> m = new HashMap<>();
m.put("oooo","ooo1");
param.put("obj",m);
// todo: 加判斷邏輯
return pjp.proceed(args);
}
}
java控制層請求接收AOP設(shè)置的參數(shù)
@Xxxano
@GetMapping("/xxx/get")
@ApiOperation("get請求方法")
public AjaxResult xxxGet (
@ApiParam(hidden = true) @RequestAttribute("attr") XxxxDTO xxxDTO
){
return AjaxResult.success();
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-822116.html
@Xxxano
@PostMapping("/xxx/post")
@ApiOperation("post請求")
public AjaxResult xxxPost (
@ApiParam(value ="{\"aaa\":\"AAA\",\"bbb\":\"BBB\"}",example = "{\"aaa\":\"AAA\",\"bbb\":\"BBB\"}")
@RequestBody Map<String,Object> map){
return AjaxResult.success();
}
文章來源:http://www.zghlxwxcb.cn/news/detail-822116.html
到了這里,關(guān)于springboot aop 自定義注解形式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!