Commons Attributes enables Java programmers to use C#/.Net-style attributes in their code. Please see the tutorial and reference for a thorough explanation of the features and how the project integrates into the development process.
Please see the change log for summaries of code changes.
2006-08-03
Attributes 2.2 is released (release notes)
2004-08-15
Attributes 2.1 released!
2004-07-12
Attributes promoted out of sandbox to Commons proper.
Download the following files and put them in your $ANT_HOME/lib directory:
Client API: commons-attributes-api-2.2.jar
Ant task: commons-attributes-compiler-2.2.jar
qDox 1.5: qdox-1.5.jar
Download the following files:
Client API: commons-attributes-api-2.2.jar
Ant task: commons-attributes-compiler-2.2.jar
Maven plugin: commons-attributes-plugin-2.2.jar
Drop the -api and -compiler jars into your ${maven repository}/commons-attributes/jars/
directory, and the Maven -plugin in your ${maven home}/plugins/ directory.
You can now use attributes in your Java code, provided that you declare a dependency on the client API:
<dependency>
<groupId>commons-attributes</groupId>
<artifactId>commons-attributes-api</artifactId>
<version>2.2</version>
</dependency>The attribute compiler will act as a precompiler to the java:compile goal, so you do not need to do anything else.
Commons Attributes enables you to add attributes to your code:
/**
* Make this attribute inheritable...
*
* @@Inheritable()
*/
public class MyAttribute {
private final float value;
public MyAttribute( float value ) {
this.value = value;
}
public float getValue() {
return value;
}
}
/**
* Add a MyAttribute with value 0.8.
*
* @@MyAttribute( 0.8 )
*/
public class MyClass {
public static void main( String[] args ) {
System.out.println( "MyClass has the following attributes:" +
Attributes.getAttributes( MyClass.class ) );
}
}As the example shows, the attributes are type-safe and provides for validation of values.
| API | |
|---|---|
| Can add attributes to classes | Yes |
| Can add attributes to nested classes | Yes |
| Can add attributes to methods and constructors | Yes |
| Can add attributes to return values of methods | Yes |
| Can add attributes to method parameters | Yes |
| Can add attributes to fields | Yes |
| Type safe attributes | Yes |
| Ability to restrict targets | Yes, add an appropriate @@Target() attribute. |
| Attribute inheritance | Yes, add the @@Inheritable() attribue to any attribute you wish to be inheritable. |
| Inheritance without access to superclass source code | Yes |
| Named parameters in attribute declaration | Yes, corresponds to setter methods. A Sealable interface enables the instance to become read-only when all relevant setters have been called. |
| Ability to quickly find all classes with a specific attribute | Yes, via attribute indexes. |
| Object attributes don't have to be serializable | Yes |
| Multiple attributes with same tag on an element | Yes, this is controlled by the attribute itself |
| Tools | |
| Ant task | Yes |
| Maven plugin | Yes |
| Javadoc Taglet | Yes (Note: Taglets only exist in Javadoc 1.4 and later) |
| Incremental compilation | Yes |
| Compile-time Validation | Yes |
| Implementation | |
| Attribute storage | Generated classes |
| Runtime code size | 36kB |
| Unit test coverage | Excellent |