在执行方法之前使用注释执行代码

时间:2015-10-11 22:01:48

标签: java annotations

我希望在运行时执行方法之前运行一些代码,并且我想使用注释来实现它。我有一个注释@SetValues

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface SetValues
{}

我是注释新手并且有几个问题

  1. 当此注释附加到方法
  2. 时,如何执行某些代码?
  3. 如何在方法执行之前运行与注释关联的代码?

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到:

  1. 已经提到了面向方面的编程,AspectJ是这里的标准。
  2. 您可以自己编写一段代码来执行类似的操作。在这种情况下,您可能希望将所有(仅一些?)接口的对象包装在代理中具有这些带注释的方法(查看java.lang.reflect.proxy),该方法在调用方法本身之前执行所需的代码(具有看看java.lang.reflect.InvocationHandler)。将其与Method.getDeclaredAnnotations()相结合,您可以构建您想要的东西。
  3. 但是我不确定你想要的是什么。名称“SetValues”似乎暗示您想要更改某些字段的值(并且可能在执行该方法后恢复它们)。你必须意识到InvocationHandler只能做这么多。它不能也不应该破坏封装(例如,至少不比任何其他代码可以在反射的帮助下完成)。 使用此类功能时需要考虑的另一点是,当InvocationHandler尝试更改两种方法所需的值时,它可能与此类方法的并发执行非常不相容。