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();
}
显然其他框架如春都能够实现,但我无法找到他们是如何做到这一点的例子,这是可能的。
答
感谢@Beri
我曾经方面创建一个解决方案。
答
如果您需要在编译时执行某些操作,如果您希望在调用方法时执行某些操作,则应该使用面向方面编程(Aspect Oriented Programming)。 Java最常见的框架是AspectJ。
我有一个多模块示例here。这是scala的一个例子,但是你可以省略scala依赖和类,并用Java实现。 如果你想在多个地方使用该方面,你必须在一个单独的模块中实现它,以包含它并避免重复逻辑。
这个注释扫描应该在服务创建或准备使用时?你可以在某个时候扫描你的所有类,并将它应用于他们:http://*.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection – Beri
@Beri - 注释扫描? –
或某个方面:http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.html。在单个应用程序中,您只需调用aspect以查找具有注释的所有方法。 – Beri