java annotations - 在运行时自动使用

时间:2017-04-18 12:02:12

标签: java reflection annotations

所以我有一个关于在运行时使用自定义注释的问题。

让我告诉你我想要实现的目标。我创建了一个自定义注释并将其应用于服务类中的方法。

public class MyService 
{
    @MyCustomAnnotation
    public String connect()
    {
        return "hello";
    }
}

现在我可以使用反射来处理方法并将某种逻辑应用于将自定义注释应用于它们的方法。

for(Method method : obj.getClass().getDeclaredMethods())        
{           
    // Look for @MyCustomAnnotation annotated method                
    if(method.isAnnotationPresent(MyCustomAnnotation.class))            
    {
        // Do something...
    }
}

然而,我似乎错过了一个难题,因为我无法弄清楚如何在运行时自动应用反射处理步骤。

例如,如果我的应用程序中有以下主要方法,那么在运行以下内容时如何/在何处自动应用反射处理步骤?

public static void main(String[] args)
{
    MyService service = new MyService(); 
    service.connect();
}

显然这是可能的,因为像spring这样的其他框架能够实现它,但我无法找到他们如何做到这一点的例子。

2 个答案:

答案 0 :(得分:1)

如果您需要在编译时执行某些操作,则反射很有用,如果您想在调用该方法时执行某些操作,则应使用面向方面编程。最常见的Java框架是AspectJ。

我有一个多模块示例here。这是scala的一个例子,但您可以省略scala依赖项和类并使用Java实现它。 如果要在多个位置使用该方面,则必须在单独的模块中实现它,以便包含它并避免重复逻辑。

答案 1 :(得分:0)

归功于@Beri

我使用方面来创建解决方案。