Skip to main content

Java Annotations

Self-Descriptive Coding in java.

Java has introduced the feature called annotation through which elements of a program can be marked to contain some Meta data. This Meta data may be available at compile time or at running time. Now it is possible to provide some information for methods, fields, classes etc. that will be available at processing time. You can annotate your method telling to calling method how to call your method. You can annotate your class to tell something to class loader how to cerate the object of class and for what the object should be used. You can declare fields in you class those may be annotated to get their value from specified source.

New version of java and j2ee has been updated to use annotations. Like EJB, webs services, JPA(java persistence API) etc. New version EJB3.x has been simplified to create the EJB without using any XML file. Because the information required to EJB container are provided by the annotation. EJB programmer annotates his class to provide the JNDI name for EJB. In JPA, programmer annotates their coding to map the object into table. There is no need to define how to map Object data into Database.


How to use it
There are two things one is annotation and second is annotation type. Annotation is the marker entity and annotation-type is declaration about marker entity.

You can create annotation type using @ sign followed by interface keyword and annotation declarations contents. Each method declaration defines an element of the annotation type. Method declaration does not contain any parameter and throws clause. The methods have some limited return types. Primitives, String ,Class, enums, annotation, and arrays of preceding types according to the specification of annotation in JDK 1.5.


//Defining annotation type
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@ interface A1{
public String author();
public double version();
}

In the above example
Package java.lang.annotation is imported to access the Target, Retention annotations etc.
Target is being used to define that which portion of program will be annotated by this annotation. Like for class, method or field.
Retantion defines the availability of the annotation. It decides at which time annotation will be discarded, for example run time, compile time etc.
@interface is declaring the annotation A1
Methods author() and version() are elements of annotation A1.


Now following program is showing the use of above declared annotation.

//annotating class using annotation
@A1(author="Hemraj", version=1.0)
class UseAnno1{
public void print(String s){
System.out.println("Hello "+s.toUpperCase());
}
}


Here we used the annotation A1 to provide author name and version for the class. We used the following syntax to use annotation.

@annotation (element1=val1, element2=value2…..)

There may more syntax for deferent types of annotations. We provided value “Hemraj” to the element author and value 1.0 to element version. These elements will available with values at the processing time. We can process annotation to get elements and values at run time.



See the following program that is processing annotation.

class Anno1{
public static void main(String ar[]){
UseAnno1 a1=new UseAnno1();
Class c=a1.getClass();
A1 anno=(A1)c.getAnnotation(A1.class);
System.out.println("Author :"+anno.author());
System.out.println("Version :"+anno.version());
}
}

OUTPUT is :
Author :Hemraj
Version :1.0


The above simple program gets the class of object a1 and then get the annotation by calling getAnnotation() method. This method will take the annotation declaration to create proxy object and it return Object type so we have to cast it as A1 type and the reference of annotation is hold into anno reference variable.

Then we called author() method to get value of author element and version() method to get the value of version element from the object referenced through anno reference variable.

Comments

Popular posts from this blog

Using HyperSQL (HSQLDB)

HSQLDB is a portable RDBMS implemented in pure java. It can be embedded with your application as well as can be used separately. It is very a small database that supports almost all features of the standard database system. It comes with small jar file that can be found in lib folder. The HSQLDB jar package is located in the /lib directory of the ZIP package and contains several components and programs. Core components of jar file are : HyperSQL RDBMS Engine (HSQLDB), HyperSQL JDBC Driver, Database Manager, and Sql Tool. Installing and Using Download: download latest release of HyperSQL database from http://hsqldb.org website and extract it. You will see following contents. Here "bin" directory contains some batch files those can be used to run a swing based GUI tool. You can use runManagerSwing.bat to connect to database, but database must be on before running it. Directory lib contains File hsqldb.jar . It is the database to be used by you. Running database First

How to handle values from dynamically generated elements in web page using struts2

Some time you will see the form containing the button " Add More " . This facility is provided for the user to get the values for unknown number of repeating for some information. for example when you are asking to get the projects details from user, you need to put the option to add the more project for the user since you don't known how many projects user have. In the HTML form, you repeat the particular section to get the multiple values for those elements. In Html page , you can put the option to add new row of elements or text fields by writing the java script or using JQuery API. Now, the question is that how to capture the values of dynamically generated text fields on the server. Using the servlet programming you can get the values by using getParameters() method that resultants the array of the parameter having the same name. But this limit you to naming the text fields in the HTML form. To ally this approach, you have to take the same name for t

In Process Mode of HSQLDB in web application.

If you want to use the database into your web application, you can use the HSQLDB in In_Process mode. In this mode, you can embed the HSQLDB into your web application and it runs as a part of your web application programm in the same JVM. In this mode, the database does not open any port to connect to the application on the hosing machine and you don't need to configure anything to access it. Database is not expposed to other application and can not be accessed from any dabase tools like dbVisualizer etc. In this mode ,database will be unknown from any other person except you. But in the 1.8.0 version, you can use Server intance for external as well as in process access.  To close the databse, you can issue SHUTDOWN command as an SQL query.   In the in-process mode, database starts from JDBC with the associated databse file provided through  connection URL. for example   DriverManager.getConnection("jdbc:hsqldb:mydatabase","SA","");   Here myd