2010-03-01 89 views
15

可能重复:
How and where are Annotations used in Java?
Java beans, annotations: What do they do? How do they help me?你使用Java注释吗?

一遍又一遍,我读到了Java 5的注解是语言的 '高级功能'。直到最近,我还没有太多使用注释(除了通常的@Override,& c),但在一些与webservice相关的项目上工作已迫使我的手。自从我学习Java 5之前,我从来没有真正花时间坐下来讨论注释系统。

我的问题 - 你们其实使用注释?他们对你有多大帮助,日常工作?有多少StackOverflow-ers必须编写自定义注释?

+3

这是非常主观的。请修改并将此问题标记为社区Wiki。这里有一些比较类似的问题和有趣的答案:http://stackoverflow.com/questions/2072681/java-beans-annotations-what-do-they-do-how-do-they-help-me, HTTP://计算器。com/questions/1372876/how-and-where-annotations-used-in-java and http://stackoverflow.com/questions/1862666/why-are-people-continuing-to-use-xml-mapping-文件 - 而不是注释 – BalusC 2010-03-01 18:11:14

+1

[使用java注释创建自定义测试运行器](http://www.singhajit.com/java-custom-annotations/) – 2017-01-22 08:30:33

回答

6

也许Java注解的最有用和使用的情况下是使用POJO +注释,而不是XML配置文件

我使用它,因为很多(因为你已经说)如果你使用一个Web框架(如春或缝)他们通常有大量的注释来帮助你。

我最近写了一些注释来构建自定义状态机,验证目的和批注的注释(使用它的元数据方面)。国际海事组织帮助制作更清晰,更易于理解和管理的代码。

3

当前项目(200KLOC),我用所有的时间注解是:

@NotNull/@Nullabe 
@Override 
@Test 
@Ignore 
@ThreadSafe 
@Immutable 

但我还没有写我还没有自己的注释里!

1

注解仅用于框架,它们在hibernate/jpa中工作得很好。直到你编写一个需要一些额外信息的框架传递给它的对象时,你将不会编写自己的注释。

但是有新的和冷静的JUnit的功能,让你写你自己的注释在测试 - http://blog.mycila.com/2009/11/writing-your-own-junit-extensions-using.html

+0

也就是说,直到您意识到所有有用的东西,你可以用他们,如果你自己写! – 2010-03-01 19:08:01

0

我每天使用注解,他们是美妙的。我将它们与jsf和jpa一起使用,发现它们比替代的XML配置更易于管理和使用。

2

我已经使用了注解:

  • 休眠,所以我并不需要保留那些巨大的XML文件;
  • XML序列化,所以我描述了对象应该如何呈现在对象本身;
  • 警告移除的警告,我不想禁用(并为此无法正确解决特定情况)。

我已经创建的注释:

  • 描述要执行我的方法(例如,用户必须登录),以便所需要的状态;
  • 将我的方法标记为可从特定平台执行,并具有该平台的其他属性;
  • 可能还有一些其他类似的操作。

当我需要获得关于我正在使用的对象的更多信息时,我创建的注释用Reflection读取。它的工作原理很好。

0

我使用注释在我的状态同步系统中描述哪些类是注释类的特化,以及它们应该在哪些环境中使用(创建对象时,将为其实体列表生成为网络上的节点创建最佳实体类;即服务器节点的播放器实体改为ServerPlayer实体)。此外,还介绍了类中的属性以及它们应该如何跨机器进行同步。

0

我们有一个报告生成器作为我们的web应用程序的一部分。用户可以添加大量小部件,这些小部件都是同一组主题(图形,表格等)上的所有小变体。

UI基于窗口小部件类中的自定义注释构建自身。 (例如,注释可能包含默认值和有效值,这些值将呈现为下拉列表,或者表示该字段是否为必填项的标志)。

事实证明,这是一种允许开发者无需触摸用户界面即可启动小部件的好方法。

0

我们只是用来注解创建一个简单的方法来验证我们的POJO的:

@NotEmpty 
@Pattern(regex = "I") 
private String value; 

然后我们通过Hibernate validator运行此将尽我们的一切验证了我们:

import org.hibernate.validator.ClassValidator; 
import org.hibernate.validator.InvalidValue; 

public void validate(T validateMe) { 
    ClassValidator<T> validator = new ClassValidator<T>((Class<T>) validateMe.getClass()); 
    InvalidValue[] errors = validator.getInvalidValues(validateMe); 
} 

伟大工程。干净的代码。

0

我们使用自定义的注释作为我们的集成测试系统的一部分:

@Artifact:对联营企业的集成测试有一个问题编号。跟踪矩阵然后自动生成我们的测试和监管部门。

@Exclude:忽略基于浏览器平台/版本的集成测试。保持IE 6的缺陷堵塞我们每晚的测试运行:)

@SeleniumSession:为每个集成测试定义测试特定的硒设置。

他们是一个非常强大的工具,但你必须小心使用它们。只要看看那些早期的.NET企业级文件,看看什么是噩梦强制性注释可以:)