Table of Contents
Tutorial Content: Spring tutorial for beginners
- Introduction to spring framework
- Spring interview questions
- Dependency injection(ioc) in spring
- Spring XML based configuration example
- Spring java based configuaration
- Dependency injection via setter method in spring
- Dependency injection via constructor in spring
- Spring Bean scopes with examples
- Initializing collections in spring
- Beans Autowiring in spring
- Inheritance in Spring
- Spring ApplicationContext
- Spring lifetime callbacks
- BeanPostProcessors in Spring
- Annotation based Configuration in spring
- Spring AOP tutorial
The @Autowired annotation provides control over where and how autowiring can be done.This annotations can be done on setter method,contructor or property.We will see each in detail with example.
@Autowired on setter methods:
Example:
For configuring spring in your eclipse ide please refer hello world example
1.Country.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package org.arpit.javapostsforlearning; import org.springframework.beans.factory.annotation.Autowired; public class Country { String countryName; Capital capital; public String getCountryName() { return countryName; } public void setCountryName(String countryName) { this.countryName = countryName; } public Capital getCapital() { return capital; } @Autowired public void setCapital(Capital capital) { this.capital = capital; } } |
2.Capital.java
Create Capital.java under package org.arpit.javapostsforlearning.java.Above Country class contains object of this class.Copy following content into Capital.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package org.arpit.javapostsforlearning; public class Capital { String capitalName; public String getCapitalName() { return capitalName; } public void setCapitalName(String capitalName) { this.capitalName = capitalName; } } |
3.AutowiredAnnotationInSpringMain.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package org.arpit.javapostsforlearning; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AutowiredAnnotationInSpringMain{ public static void main(String[] args) { ApplicationContext appContext = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Country countryObj = (Country) appContext.getBean("CountryBean"); String countryName=countryObj.getCountryName(); Capital capital=countryObj.getCapital(); String capitalName=capital.getCapitalName(); System.out.println(capitalName+" is capital of "+countryName); } } |
4.ApplicationContext.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:annotation-config/> <bean id="CountryBean" class="org.arpit.javapostsforlearning.Country"> <property name="countryName" value="India" /> </bean> <bean id="CaptialBean" class="org.arpit.javapostsforlearning.Capital"> <property name="capitalName" value="Delhi" /> </bean> </beans> |
As you can see there is no relationship between above two beans,but we have used @autowired annotation which will automatically wire above beans on the basis of type.
5.Run it:
When you will run above application,you will get following as output.
1 2 3 |
Delhi is capital of India |
@Autowired on properties:
Country.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package org.arpit.javapostsforlearning; import org.springframework.beans.factory.annotation.Autowired; public class Country { String countryName; @Autowired Capital capital; public String getCountryName() { return countryName; } public void setCountryName(String countryName) { this.countryName = countryName; } public Capital getCapital() { return capital; } } |
Run it:
When you will run above application,you will get following as output.
1 2 3 |
Delhi is capital of India |
@Autowired on Constructor:
you can use @autowired on constructor also and it will work even if you didn’t define tag in XML configuration file.Make following changes to above code:
Country.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package org.arpit.javapostsforlearning; import org.springframework.beans.factory.annotation.Autowired; public class Country { String countryName; Capital capital; @Autowired public Country(String countryName, Capital capital) { super(); this.countryName = countryName; this.capital = capital; } public String getCountryName() { return countryName; } public void setCountryName(String countryName) { this.countryName = countryName; } public Capital getCapital() { return capital; } } |
ApplicationContext.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:annotation-config/> <bean id="CountryBean" class="org.arpit.javapostsforlearning.Country"> <constructor-arg index="0" type="java.lang.String" value="India" /> </bean> <bean id="CaptialBean" class="org.arpit.javapostsforlearning.Capital"> <property name="capitalName" value="Delhi" /> </bean> </beans> |
Run it:
When you will run above application,you will get following as output.
1 2 3 |
Delhi is capital of India |
@Autowired with Arugments:
Country.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package org.arpit.javapostsforlearning; import org.springframework.beans.factory.annotation.Autowired; public class Country { String countryName; @Autowired(required=false) Capital capital; public String getCountryName() { return countryName; } public void setCountryName(String countryName) { this.countryName = countryName; } public Capital getCapital() { return capital; } } |
Now it will run even if you don’t provide capital bean in XML configuration.