我们可以在servlet类中使用常见的javax.annotation吗?

时间:2017-10-29 07:03:12

标签: java servlets annotations

我可以在javax.annotation.Resource类中使用javax.annotation.PreDestroyjavax.annotation.security.RolesAllowedServlet这样的java常用注释吗?

1 个答案:

答案 0 :(得分:0)

从技术上讲,没有什么可以阻止你这样做。你可以在任何你想要的类中使用它(好吧,几乎每一个)注释。当然,如果注释可以应用于那种类型的Java元素(方法,字段,类)。注释本身不会在代码中带来任何逻辑或魔力。自己检查the source:你会发现他们中的大部分都只是数据持有者。

没有处理器,注释就没有了。处理可以在编译时或在运行时中进行。

编译时注释处理可以在编译之前更改源代码(简化这里的内容)。它可以引入额外的行为(如空检查)或生成方法(如Lombok's @Getter / @Setter。编译时间注释通常在处理后被删除,它们不存在于运行时。

您提出的注释是不同类型的 - 运行时注释。显然,资源注入或角色检查不能在编译时完成。因此,他们需要处理器才能生效,但该处理器必须存在于正在运行的应用程序的类路径中。通常,此类处理器由运行应用程序的环境提供。在您的情况下,这些是Java EE注释,它们需要与Java EE兼容的应用程序服务器才能工作。即只有在配置的应用程序服务器(如Glassfish或WebSpere)中运行类时才会发生魔术。如果您在Tomcat或Jetty中运行应用程序(它们是 Web服务器) - 注释将不起作用,它们将被“省略”,因为没有处理器来处理它们。