注解看起来是一个很神奇的东西,也是一个解耦的利器。直入正题,从创建一个自定义的注解开始。
1.创建注解@MyLogger,添加属性message,fallback。这里Target对象选择方法,Retention选择运行时。Ctrl+点击可以查看ElementType的可选值,里面有非常详尽的注释,这里不再赘述。
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyLogger {
String message() default "";
String fallback() default "fallbackMethod";
}
2.创建切面MyLoggerAspectj,里面做一个增强处理,如果message为add,返回结果为原方法+fallback设定的方法。
@Aspect
@Component
public class MyLoggerAspectj {
Logger logger = LoggerFactory.getLogger(MyLoggerAspectj.class);
private String PROCESS_TYPE_ADD = "add";
@Around("@annotation(myLogger)")
public Object around(ProceedingJoinPoint proceedingJoinPoint, MyLogger myLogger) throws Throwable {
Object o1 = proceedingJoinPoint.proceed();
if