【问题标题】:Clarification about Annotations in Java关于 Java 中的注解的说明
【发布时间】:2015-07-23 04:01:24
【问题描述】:

我正在寻找有关 Java 注释的一些说明。 Oracle https://docs.oracle.com/javase/tutorial/java/annotations/ 的后续页面说“注释对它们注释的代码的操作没有直接影响。”,但我执行了一段这样的代码

@WebServlet("/ServletLifeCycleExample")            
public class ServletLifeCycleExample extends HttpServlet {      
private static final long serialVersionUID = 1L;       
public ServletLifeCycleExample() {       
    super();          
    // TODO Auto-generated constructor stub        
}                           

@WebServlet("/ServletLifeCycleExample") 行对于代码的成功运行非常关键,即使它是一个注释。没有该行,代码就会崩溃(servlet ServletLifeCycleExample 不会被加载)。

如何解释?

【问题讨论】:

  • 你读过javadoc吗?
  • javadoc 有这个相关的注释“这个注释在部署时由容器处理,并且相应的 servlet 在指定的 URL 模式下可用。”,但即使这个注释与更多一般评论“注释对其注释的代码的操作没有直接影响。” ...问题是 - 注释可以直接影响他们注释的代码的操作吗?
  • 没有。它们只是元数据。但是容器可以使用该元数据。

标签: java servlets annotations


【解决方案1】:

“更一般地说,注解永远不会改变被注解代码的语义,但是 启用工具特殊处理”~Effective Java 2nd Edition

在这种情况下,WebServlet注解有一个间接的效果,这恰好是非常重要的。

【讨论】:

    【解决方案2】:

    注释标记类并向其添加元数据。当某些引擎(spring/app server/etc)加载带有注释的类时,它可以从注释中读取数据(或仅检查注释是否存在)并在将调用传递给您的类之前更改其行为,例如打开事务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 2013-06-15
      相关资源
      最近更新 更多