Skip to main content

Annotations



What are annotations?
Annotations are meta data in Java.
What is meta data?
A metadata is data about data. Metadata adds some additional flags on your actual data, and in runtime either you or JVM who understand these flags, can utilize this metadata information to make appropriate decisions based on context.
How it looks like?
Basic annotation is look like following.
@MyAnnotation
It starts with @ sign followed by the Annotation name.
Annotations are defined as following.
@interface MyAnnotation { }
I didn’t get it…
Ok, Annotations do basically three things in Java. It provides….
  1. Embed instructions to Java Compiler
  2. Embed instructions to Source Code Processing Tools such as IDEs
  3. Embed metadata which can be read at runtime by your Java Application or Third Party Tools
Lets look at some simple example
Below example shows how @Override annotation checks that the annotated method is overridden method.
public class DemoClass
{
   //some code
    
   @Override
   public String toString()
   {
      return super.toString();
   }
    
   @Override
   public int hashCode()
   {
      return super.hashCode();
   }
}
It causes a compile time “error” if the annotated method toString() is not found in one of the parent classes or implemented interfaces.
If someone deleted the method from parent class we now know in compilation instead of runtime.
Cool right?
Only this?
Noo, Implementations of Annotations are countless. Frameworks like Spring/Strut uses annotations to make sure we get a clean and quality output.
Java has built in Annotations which fulfills different instructions
@Override
@Deprecated
@SuppressWarnings
@SafeVarargs
@FunctionalInterface
You can always get the latest predefined Java annotations here.
So how to defined our own Custom Annotations?All Annotations must be defined with @interface keyword.
public @interface DemoAnnotation {}
And usage be as follows
@DemoAnnotation
public void toggle() {}
It’s complicated to me…
Ok, Let’s get a real world example from Spring framework.
Spring has an Annotation named @Lazy.
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Lazy {

 /**
  * Whether lazy initialization should occur.
  */
 boolean value() default true;

}
@Lazy
class VehicleFactoryConfig {
 
    @Lazy(false)
    Engine engine() {
        return new Engine();
    }
}
We can use the @Lazy when we want to initialize our bean lazily.
By default, Spring creates all singleton beans eagerly at the startup of the application context.
However, there are cases when we need to create a bean when we request it, but not at application startup.
In this case we can use @Lazy annotation to mark the fields that should/ should not initialize at startup.
By default @Lazy is marked as true. But if wanted we can make it false for specific method or a bean.
Easy as that….

Now you have a basic understanding of Annotations.
Let me know below if any questions. Cheers!

Popular posts from this blog

Autofill Dynamic Dropdowns Using Spring Jquery Ajax

This explains on how to populate values in a drop down based on a value selected on another drop down. But you can configure it load values dynamically when click on link or any other action performed (based on your requirment) Include JSTL tag library in your JSP Page 1 <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %> Use JSTL to call the required URL path through Spring bindings 1 < c : url var = "findProductForCat" value = "/products_ajax.do" /> HTML and EL code to enter in JSP page. 1 2 3 4 5 6 7 8 9 10 <select class= "select-width" id= "category_list_d" > <option value= "" > Select Category </option> <c:forEach var= "catList" items= "${category_lst}" > <option value= "${catList.categoryId}" > ${catList.categoryName } </option> </c:forEach> <

Java Version and New Features 8 - 13

Introduction Introduction Java is widely used staticly typed programming language which is founded over 25 years back. It's almost everywhere from home appliances, mobile devices to industry scale systems. Java is evolving over the time and from Java 8 onwards there were major changes introduced to the language. Below are the list of all the changes on each version. Imperative vs Declarative Programming Imperative approach is defining step by step on HOW we are going to achieve the end result. Declarative approach is describing WHAT we want as the output. Simple example would be a classical for loop in Java which we can call as imperative programming and a select query in sql as declarative programming.

Java 5

Java 5 is known as the “ Tiger ” release since it released many of the key features many of the developers used today. Many interview questions are based on this version. Following are the key features introduced in Java 5 Generics Annotations Autoboxing / Unboxing Typesafe Enums Varargs Foreach Loop Static Imports Scanner Class Assertions StringBuilder