java注释 - 运行时自动使用

问题描述:

所以我有一个问题涉及在运行时使用自定义注释。java注释 - 运行时自动使用

让我填写你想要达到的目标。我创建了一个自定义注释并将其应用于服务类中的方法。

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(); 
} 

显然其他框架如春都能够实现,但我无法找到他们是如何做到这一点的例子,这是可能的。

+0

这个注释扫描应该在服务创建或准备使用时?你可以在某个时候扫描你的所有类,并将它应用于他们:http://*.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection – Beri

+0

@Beri - 注释扫描? –

+1

或某个方面:http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.html。在单个应用程序中,您只需调用aspect以查找具有注释的所有方法。 – Beri

感谢@Beri

我曾经方面创建一个解决方案。

如果您需要在编译时执行某些操作,如果您希望在调用方法时执行某些操作,则应该使用面向方面编程(Aspect Oriented Programming)。 Java最常见的框架是AspectJ。

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