Spring @Component Annotation

The @Component Annotation Indicates that an annotated class is a "component". Such classes are considered as candidates for auto-detection when using annotation-based configuration and classpath scanning. 

The @Component is a generic stereotype for any Spring-managed component. @Repository, @Service, and @Controller are specializations of @Component for more specific use cases, for example, in the persistence, service, and presentation layers, respectively.

 See the following example using component annotation:

Triangle.java
package com.dineshonjava.sdnext.componentstreatypeannotation.tutorail;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

@Component
public class Triangle
{
 private Point pointA;
 private Point pointB;
 private Point pointC;
 
 /**
  * Using @Resource annotation for wiring with bean dependency
  * @param pointA the pointA to set
  */
 @Resource
 public void setPointA(Point pointA) {
  this.pointA = pointA;
 }

 /**
  * Using @Resource annotation for wiring with bean dependency
  * @param pointB the pointB to set
  */
 @Resource
 public void setPointB(Point pointB) {
  this.pointB = pointB;
 }

 /**
  * Using @Resource annotation for wiring with bean dependency
  * @param pointC the pointC to set
  */
 @Resource
 public void setPointC(Point pointC) {
  this.pointC = pointC;
 }

 public void draw()
 {
System.out.println("Drawing Triangle");
System.out.println("PointA is ("+pointA.getX()+", "+pointA.getY()+")");
System.out.println("PointB is ("+pointB.getX()+", "+pointB.getY()+")");
System.out.println("PointC is ("+pointC.getX()+", "+pointC.getY()+")");
 }
}
Here we are using @Component annotation with the Triangle class which auto detect as bean in Spring IoC Container.

Point.java
package com.dineshonjava.sdnext.componentstreatypeannotation.tutorail;

public class Point
{
 private int x;
 private int y;
 /**
  * @return the x
  */
 public int getX() {
  return x;
 }
 /**
  * @param x the x to set
  */
 public void setX(int x) {
  this.x = x;
 }
 /**
  * @return the y
  */
 public int getY() {
  return y;
 }
 /**
  * @param y the y to set
  */
 public void setY(int y) {
  this.y = y;
 }
}

DrawingApp.java
package com.dineshonjava.sdnext.componentstreatypeannotation.tutorail;

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

/**
 * @author Dinesh
 *
 */
public class DrawingApp 
{
 /**
  * @param args
  */
 public static void main(String[] args) 
 {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
Triangle triangle= (Triangle) context.getBean("triangle");
triangle.draw();
 }
}

spring.xml
<beans xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:security="http://www.springframework.org/schema/security" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemalocation="http://www.springframework.org/schema/beans">
  
<bean class="com.dineshonjava.sdnext.componentstreatypeannotation.tutorail.Point" id="pointA">
<property name="x" value="0"></property>
<property name="y" value="0"></property>
</bean>
 
<bean class="com.dineshonjava.sdnext.componentstreatypeannotation.tutorail.Point" id="pointB">
<property name="x" value="-20"></property>
<property name="y" value="0"></property>
</bean>

<bean class="com.dineshonjava.sdnext.componentstreatypeannotation.tutorail.Point" id="pointC">
<property name="x" value="20"></property>
<property name="y" value="0"></property>
</bean> 
  
<context:annotation-config></context:annotation-config>
  
<context:component-scan base-package="com.dineshonjava.sdnext.componentstreatypeannotation.tutorail">
</context:component-scan>
</beans>

Here <context:component-scan/> scan the all classes in the base package given as "com.dineshonjava.sdnext.componentstreatypeannotation.tutorail" which are annotated with the @Component annotation or its specific annotations like @Component, @Repository, @Service & @Controller etc then these classes detect as bean of Spring IoC Container.

If every thing is OK then run that application we will get the following output.
Output:
Jul 14, 2012 8:54:13 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@ab50cd: startup date [Sat Jul 14 20:54:13 IST 2012]; root of context hierarchy
Jul 14, 2012 8:54:13 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring.xml]
Jul 14, 2012 8:54:14 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1198891: defining beans [pointA,pointB,pointC,center,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,circle,triangle,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy
Drawing Triangle
PointA is (0, 0)
PointB is (-20, 0)
PointC is (20, 0)





No comments:

Post a Comment