当前位置: 首页 > 面试题库 >

Java注释可以帮助我吗?

秦俊发
2023-03-14
问题内容

我想知道是否有一种方法可以指定在类方法之前调用方法。我知道这样的事情应该是可能的,因为JUnit具有before(),所以我想做的事情是相似的。

这是我想做的一个具体例子

class A {

 public void init(int a) {
  System.out.println(a);
 }

 @magic(arg=1)
 public void foo() { 
   //
 }

 public static void main() {
   A a = new A();
   a.foo();
 }
}

//Output: 1

基本上我想要一个注释在foo()之前告诉编译器或jvm调用init()


问题答案:

如果有的interface A话,您可以使用此接口的实例Proxyinvoke方法的内部包装,InvocationHandler您可以自由检查方法是否带注释,并根据该方法执行一些操作:

class Initalizer implements InvocationHandler {
    private A delegate;
    Initializer(A delegate) {
        this.delegate = delegate;
    }

    public Object invoke(Object proxy, Method method, Object[] args) {
        if (method.isAnnotationPresent(magic.class)) {
            magic annotation = method.getAnnotation(magic.class);
            delegate.init(magic.arg);
        }
        method.invoke(delegate, args);
    }
} 
A realA = ...;
A obj = Proxy.newProxyInstance(A.class.getClassLoader(), new Class[] {A.class}, new Initializer(realA));

或者,您可以尝试使用AspectJ的“之前”建议。它将类似于下一个:

@Aspect
public class Initializer {
    @Before("@annotation(your.package.magic) && target(obj) && @annotation(annotation)")
    private void initialize(A obj, magic annotation) {             
         a.init(annotation.arg);
    }
}

我不确定代码片段是否有效,它们只是说明想法。



 类似资料:
  • 配置文件在这里输入图像描述@my appService提供商 在此处输入图像描述 在我安装input composer后,有人能告诉我这个问题吗?问题是,现在我无法迁移 当我运行php artisan迁移时,这个问题会显示出来 未知数据库配置/database.php(SQL:选择*从information_schema.tables其中table_schema=配置/database.php和t

  • 本文向大家介绍有人可以帮助我将Hybris与SAP ERP集成吗?,包括了有人可以帮助我将Hybris与SAP ERP集成吗?的使用技巧和注意事项,需要的朋友参考一下 许多公司都有一个本地解决方案,其中包含主数据,客户和产品信息以及价格数据。当赢得机会并生成销售订单时,需要SAP ECC系统的详细信息。 以下是为什么需要与SAP ERP和CRM系统集成的关键原因- 为所有销售,市场营销和服务活动(

  • 作者不是太忙(并且心情不错)的话,会回答一般性的脚本编程问题。但是,如果你的特定应用的脚本不工作,建议你最好把问题发到comp.os.unix.shell新闻组去.

  • 问题内容: 我有如下测试: 具有以下输出: 但是,我希望注释可以被覆盖,并且不会出现警告。 有没有办法做到这一点? 编辑:我发现一个错误似乎与此有关,但我最终运行4.2.0,仍然得到上述行为。 问题答案: 实际上,JSR-303不支持覆盖验证注释。相反,子类中重写方法的注释将 累积 应用:从规范的3.3节开始:

  • Traceback(最近一次调用last):File " c:\ users \ administrator \ appdata \ local \ programs \ python \ python 36 \ lib \ runpy。py”,第193行,in _ run _ module _ as _ main“main”,mod_spec)文件“c:\ users \ administrat

  • 本文向大家介绍Java的文档注释之生成帮助文档的实例,包括了Java的文档注释之生成帮助文档的实例的使用技巧和注意事项,需要的朋友参考一下 示例: 生成命令 注意Person.java路径名要正确。 效果: 其中index.html为主页,打开如下图: 以上这篇Java的文档注释之生成帮助文档的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。