spring AOP 自定义注解使用
思维导图转载https://blog.****.net/wangpengzhi19891223/article/details/78131137/
spring 配置
<!-- 注解支持-->
<aop:aspectj-autoproxy/>
<!-- aop -->
<bean id="rightControlService" class="com.naro.erp.service.impl.RightControlService"></bean>
pom依赖
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
注解类
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RightControl {
boolean verify();
}
切面类
@Aspect
@Component
public class RightControlService {
Logger logger = LoggerFactory.getLogger(RightControlService.class);
@Pointcut(value = "@annotation(com.naro.erp.util.RightControl)")
public void pointCut(){}
// @Before("pointCut() ")
// public void before(JoinPoint point) {
// System.out.println("我是前置通知,我将要执行一个方法了");
//
// //获取目标方法的参数信息
// String className = point.getTarget().getClass().getName();
// Object[] params = point.getArgs();
// }
//
// @AfterReturning(value = "pointCut() && @annotation(rightControl)",returning = "result")
// public void after(RightControl rightControl,Object result) {
// }
@Around("pointCut()")
public Object setCache(ProceedingJoinPoint point) throws Throwable {
Object[] args = point.getArgs();//入参
String methodName = point.getSignature().getName();//方法名
AjaxResult ajaxResult= (AjaxResult)point.proceed();
return ajaxResult;
}
}
在需要使用注解的方法上打上注解即可
ProceedingJoinPoint 环绕通知专用