How to use spring’s component-scan and annotation-config
What context:annotation-config is for?
It allow us to use @Autowire, @Required and @Qualifier annotations.
What context:component-scan is for?
It allow @Component, @Service, @Controller, etc.. annotations.
What is the advantage?
It allows us to manage dependency directly in the java class.
Step by Step example.
This example show how to classes:
- Adder.java, A class to do the arithmetic add operation
- Calculator.java, A class that calls the Adder class using the Autowired annotation
1. Write an applicationContext file and put it in the root of the classpath.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="test.example"/>
<context:annotation-config/>
</beans>
you should provide to component-scan the base path you what to scan component
2. Write Adder.java
package test.example; import org.springframework.stereotype.Component;
@Component("adder")
public class Adder {
public int add(int a, int b){
return a + b;
}
}
3. Write Calculator.java
package test.example;
import org.springframework.stereotype.Component; import org.springframework.beans.factory.annotation.Autowired;
@Component("calculator")
public class Calculator {
private Adder adder;
@Autowired
public void setAdder(Adder adder) {
this.adder = adder;
}
public void makeAnOperation(){
int r1 = adder.add(1,2);
System.out.println("r1 = " + r1);
}
}
4. Write the main method (it can be in a class called Main.java):
public static void main(String[] args) {
GenericApplicationContext context = new GenericApplicationContext();
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(context);
xmlReader.loadBeanDefinitions(new ClassPathResource("applicationContext.xml"));
context.refresh();
Calculator calculator = (Calculator) context.getBean("calculator");
calculator.makeAnOperation();
}
How it is working?
1. We are declaring two components (@Component) ‘Adder’ and ‘Calculator’. It is is very important to note that the name of the component is between (”….”) just next to the @Component annotation.
2. We are declaring one autowired method in Calculator.java. With it, you don’t have to instanciate manually an Adder. just use it.
Follow me on twitter
Recent Comments