我正在创建一个自定义注释。无论我在哪里应用该注释,我都想调用一个方法或执行某些功能。假设我创建了一个像@info(message="Invoking xyz method")
这样的注释。无论在何处应用注释,该消息都将打印在控制台上。
答案 0 :(得分:1)
这是AspectJ的一个非常好的用例。一个简单的实现如下:
方面文件(定义执行的行为,由注释自定义):
@Aspect
public class LoggingAspect {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Before("execution(@com.example.demo.aspect.Info * *(..)) && @annotation(info)")
public void before(JoinPoint joinPoint, Info info) {
logger.info(info.value()); // simply print the message from the annotation
}
}
注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Info {
String value();
}
使用注释:
@Info("Calling my method here...")
public void myMethod() {
// your regular business logic
}
上面的代码对于具有spring-aop和Aspectjweaver Maven依赖项的启用Spring Boot的应用程序几乎可以即插即用。对于非Spring应用程序,您可以查看纯粹的AspectJ快速入门文档,例如https://www.baeldung.com/aspectj
中的文档。