pom依赖
第一种
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
第二种(需要依赖spring-aop-xxx.jar)
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.9.1</version>
</dependency>
下面这个包,在高版本的spring-aop-xxx.jar中已经集成了,不需要引用。部分低版本可能需要引用。
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
编写注解
编写注解,用于标注要植入aop功能的位置
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
@Documented
public @interface Example {
}
编写实现功能
编写aop实现的功能,一般主要实现@Around部分内容即可。
@Aspect
@Component
public class EnableCache {
@Pointcut("@annotation(com.junfeng.care.core.annotation.Cache)")
public void point(){};
@Before("point()")
public void before(){
System.out.println("before");
}
@Around("point()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
Example example= method.getAnnotation(Example.class);
Object o = joinPoint.proceed();
return o;
}
@After("point()")
public void after(){
System.out.println("after");
}
}
注解使用
@Service("xXXService")
public class XXXServiceImpl implements XXXService {
@Override
@Example
public Object queryById(String id) {
return null;
}
}
|