如何在Java中使用注解调用方法?

时间:2018-08-27 12:06:01

标签: java annotations

我正在创建一个自定义注释。无论我在哪里应用该注释,我都想调用一个方法或执行某些功能。假设我创建了一个像@info(message="Invoking xyz method")这样的注释。无论在何处应用注释,该消息都将打印在控制台上。

1 个答案:

答案 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

中的文档。