Tuesday, April 24, 2012

Introduction to Annotations and the Required Annotation




Here we'll have our first look at Spring annotations. We'll understand and implement the Required annotation, and we'll also learn how it's actually a BeanPostProcessor that's working behind the scenes.


org.springframework.beans.factory.annotation.Required


@Target(value={METHOD})
@Retention(value=RUNTIME)


Marks a method (typically a JavaBean setter method) as being 'required': that  is, the setter method must be configured to be dependency-injected with a value.
Please do consult the javadoc for the RequiredAnnotationBeanPostProcessor class (which, by default, checks for the presence of this annotation). 
*****************************************************************


package com.venkat.core;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;




public class DrawingApp {


 /**
  * @param args
  */
 public static void main(String[] args) {
  ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");
  Shape shape=(Shape)factory.getBean("circleBean");
  //Shape shape=(Shape)factory.getBean("triangleBean");
  shape.draw();


 }


}
****************************************************************


package com.venkat.core;


import org.springframework.beans.factory.annotation.Required;


public class Circle implements Shape {


 private Point center;

 public Point getCenter() {
  return center;
 }
 @Required
 public void setCenter(Point center) {
  this.center = center;
 }
 @Override
 public void draw() {
  System.out.println("Drawing Circle......................");
System.out.println("Circle Point is (" +center.getX()+","+ center.getY() +")");  
 }
}
***************************************************************


package com.venkat.core;


public class Point {


private int x;
private int y;
public int getY() {
 return y;
}
public void setY(int y) {
 this.y = y;
}
public int getX() {
 return x;
}
public void setX(int x) {
 this.x = x;
}



}
***************************************************************
package com.venkat.core;


public interface Shape {
public void draw();
}
***************************************************************
package com.venkat.core;




public class Triangle implements Shape{


private  Point  pointA;
private  Point  pointB;
private  Point  pointC;




 public Point getPointA() {
  return pointA;
 }


 public void setPointA(Point pointA) {
  this.pointA = pointA;
 }


 public Point getPointB() {
  return pointB;
 }


 public void setPointB(Point pointB) {
  this.pointB = pointB;
 }


 public Point getPointC() {
  return pointC;
 }


 public void setPointC(Point pointC) {
  this.pointC = pointC;
 }
 public void draw()
 {
  System.out.println("Drawing Triangle ...........");
  System.out.println("Point A =("+getPointA().getX()+","+getPointA().getY() +")");
  System.out.println("Point B =("+getPointB().getX()+","+getPointB().getY() +")");
  System.out.println("Point C =("+getPointC().getX()+","+getPointC().getY() +")");
 }



}
*****************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<beans 
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:p="http://www.springframework.org/schema/p"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


  <bean id="triangleBean" class="com.venkat.core.Triangle" >
  <property name="pointA" ref="zeroPoint"/>
  <property name="pointB" ref="point1"/> 
  <property name="pointC" ref="point2"/>
  </bean>
  
<bean id="zeroPoint" class="com.venkat.core.Point">
 <property name="x" value="0"/>
 <property name="y" value="0"/>
 </bean>
 <bean id="point1" class="com.venkat.core.Point">
 <property name="x" value="10"/>
 <property name="y" value="10"/>
 </bean>
 <bean id="point2" class="com.venkat.core.Point">
 <property name="x" value="0"/>
 <property name="y" value="10"/>
 </bean>


 <bean id="circleBean" class="com.venkat.core.Circle" >
 <property name="center" ref="zeroPoint"/> 
  </bean>
  <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>
</beans>





No comments:

Post a Comment