Spring Auto-Wiring Beans with @Autowired annotation

In last Spring auto-wiring in XML example, it will autowired the matched property of any bean in current Spring container. In most cases, you may need autowired property in a particular bean only.

In Spring, you can use @Autowired annotation to auto wire bean on the setter method, constructor or a field. Moreover, it can autowired property in a particular bean.

Note
The @Autowired annotation is auto wire the bean by matching data type.

See following full example to demonstrate the use of @Autowired.

1. Beans

A customer bean, and declared in bean configuration file. Later, you will use “@Autowired” to auto wire a person bean.


package com.mkyong.common;

public class Customer 
{
	//you want autowired this field.
	private Person person;
	
	private int type;
	private String action;
	
	//getter and setter method
	
}

<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="CustomerBean" class="com.mkyong.common.Customer">
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>

	<bean id="PersonBean" class="com.mkyong.common.Person">
		<property name="name" value="mkyong" />
		<property name="address" value="address 123" />
		<property name="age" value="28" />
	</bean>
	
</beans>

2. Register AutowiredAnnotationBeanPostProcessor

To enable @Autowired, you have to register ‘AutowiredAnnotationBeanPostProcessor‘, and you can do it in two ways :

1. Include <context:annotation-config />

Add Spring context and <context:annotation-config /> in bean configuration file.


<beans 
	//...
	xmlns:context="http://www.springframework.org/schema/context"
	//...
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	//...

	<context:annotation-config />
	//...
</beans>

Full example,


<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-2.5.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-2.5.xsd">

	<context:annotation-config />

	<bean id="CustomerBean" class="com.mkyong.common.Customer">
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>

	<bean id="PersonBean" class="com.mkyong.common.Person">
		<property name="name" value="mkyong" />
		<property name="address" value="address ABC" />
		<property name="age" value="29" />
	</bean>
	
</beans>
2. Include AutowiredAnnotationBeanPostProcessor

Include ‘AutowiredAnnotationBeanPostProcessor’ directly in bean configuration file.


<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean 
class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
	
	<bean id="CustomerBean" class="com.mkyong.common.Customer">
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>

	<bean id="PersonBean" class="com.mkyong.common.Person">
		<property name="name" value="mkyong" />
		<property name="address" value="address ABC" />
		<property name="age" value="29" />
	</bean>
	
</beans>

3. @Autowired Examples

Now, you can autowired bean via @Autowired, and it can be applied on setter method, constructor or a field.

1. @Autowired setter method

package com.mkyong.common;

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

public class Customer 
{
	private Person person;
	private int type;
	private String action;
	//getter and setter methods
	
	@Autowired
	public void setPerson(Person person) {
		this.person = person;
	}
}
2. @Autowired construtor

package com.mkyong.common;

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

public class Customer 
{
	private Person person;
	private int type;
	private String action;
	//getter and setter methods
	
	@Autowired
	public Customer(Person person) {
		this.person = person;
	}
}
3. @Autowired field

package com.mkyong.common;

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

public class Customer 
{
	@Autowired
	private Person person;
	private int type;
	private String action;
	//getter and setter methods
}

The above example will autowired ‘PersonBean’ into Customer’s person property.

Run it


package com.mkyong.common;

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

public class App 
{
    public static void main( String[] args )
    {
    	ApplicationContext context = 
    	  new ClassPathXmlApplicationContext(new String[] {"SpringBeans.xml"});
    	
    	Customer cust = (Customer)context.getBean("CustomerBean");
    	System.out.println(cust);
    	
    }
}

Output


Customer [action=buy, type=1, 
person=Person [address=address 123, age=28, name=mkyong]]

Dependency checking

By default, the @Autowired will perform the dependency checking to make sure the property has been wired properly. When Spring can’t find a matching bean to wire, it will throw an exception. To fix it, you can disable this checking feature by setting the “required” attribute of @Autowired to false.


package com.mkyong.common;

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

public class Customer 
{
	@Autowired(required=false)
	private Person person;
	private int type;
	private String action;
	//getter and setter methods
}

In the above example, if the Spring can’t find a matching bean, it will leave the person property unset.

@Qualifier

The @Qualifier annotation us used to control which bean should be autowire on a field. For example, bean configuration file with two similar person beans.


<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-2.5.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-2.5.xsd">

	<context:annotation-config />

	<bean id="CustomerBean" class="com.mkyong.common.Customer">
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>

	<bean id="PersonBean1" class="com.mkyong.common.Person">
		<property name="name" value="mkyong1" />
		<property name="address" value="address 1" />
		<property name="age" value="28" />
	</bean>
	
	<bean id="PersonBean2" class="com.mkyong.common.Person">
		<property name="name" value="mkyong2" />
		<property name="address" value="address 2" />
		<property name="age" value="28" />
	</bean>
	
</beans>

Will Spring know which bean should wire?

To fix it, you can use @Qualifier to auto wire a particular bean, for example,


package com.mkyong.common;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

public class Customer 
{
	@Autowired
	@Qualifier("PersonBean1")
	private Person person;
	private int type;
	private String action;
	//getter and setter methods
}

It means, bean “PersonBean1” is autowired into the Customer’s person property. Read this full example – Spring Autowiring @Qualifier example

Conclusion

This @Autowired annotation is highly flexible and powerful, and definitely better than “autowire” attribute in bean configuration file.

Download Source Code

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
Stephen
Guest
Stephen
Perhaps you may put a note that @Autowired will only work for the object where it’s initialized as bean in spring. I have a class and one of the property/setter is annotated with @Autowired, if I instantiate the class by using new Abc() the @Autowired won’t work, I have to declare before I can see the result. Also annotating the class with @Component also does the same magic, I guess basically they’re the same thing. This could be intuitive for certain people but at least I’ve spent not less than 30 minutes just trying to figure out what has gone… Read more »
Asif Garhi
Guest
Asif Garhi

It would have been nice if you also showed the PersonBean class

Deepak Pandey
Guest
Deepak Pandey

can you please explain which type of DI is best and why among the constructor based,setter based and field based injection.

Ucup Timposu
Guest
Ucup Timposu

oh… yeahh… very simple tutorial, but i like it… this blog

Akhil Bansal
Guest
Akhil Bansal

I am facing one problem that might interest you and you might like to have a post on it. My requirement is to Autowire an instance that requires constructor arguments to be passed. But it keeps on giving me error that default constructor not found for the bean.

Something like this…
// bean to be autowired
class A {
private int a;
public A(int a) {
}
}

// main class
class B {
@Autowired
private A a;
}

Although I have declared in spring context a bean where constructor argument is specified for bean A

yogesh prajapati
Guest
yogesh prajapati

xml mapping for annotations is compulsory?.
is there any way that i wire my bean without any xml mapping.

trackback
Spring: Null with @Inject | Active Intelligence

[…] Spring Auto-Wiring Beans with @Autowired… – mkyong.com – Viewed 6 times […]

Tauqeer
Guest
Tauqeer

Very good I clear my doubts.

pirater compte facebook en ligne 2013
Guest
pirater compte facebook en ligne 2013

Highly energetic article, I loved that bit. Will there be a part
2?

Fletcher
Guest
Fletcher

Aw, this was an incredibly nice post. Taking a few minutes and
actual effort to create a really good article_ but what can I say_
I procrastinate a lot and never ssem to get anything done.

Milagros
Guest
Milagros

I was curious if you ever thought of changing the layout of your
site? Its very well written; I love what youve ggot to say.
Buut maqybe you could a little more in thhe way of contdnt so people
could connect with it better. Youve got an awful lot of
text for only havving one or 2 images. Maybe
you could space iit outt better?

shellac nail polish
Guest
shellac nail polish

What’s up, after reading this amazing piece of writing i am also cheerful to share my know-how here with colleagues.

Librerias en guadalajara
Guest
Librerias en guadalajara

We are a group of volunteers and opening a new
scheme in our community. Your website provided us with valuable information to work on.
You’ve done a formidable job and our entire community will be thankful to you.

http://dietasmilagrosas.over-blog.com/o-fort-max-diet-resulta
Guest
http://dietasmilagrosas.over-blog.com/o-fort-max-diet-resulta

Thank you for the auspicious writeup. It actually was once a leisure account it.
Glance complex to more added agreeable from you! By the way,
how can we keep in touch?

http://cardapioemagrecer.wordpress.com/
Guest
http://cardapioemagrecer.wordpress.com/

Undeniably consider that that you stated. Your favourite reason appeared to bbe
on the net the easiest factor to kesp inn mind of.
I say to you, I certainly get annoyed while folks think about concerns
that they just do not recognize about. You managed to
hit the nail upon the top as neztly as defined out the whole thing with no need side effect , othher folks could tale a signal.
Wiill likely be baxk to get more. Thhank you

Katlyn
Guest
Katlyn

I simply couldn’t go away your website before suggesting that I really enjoyed the usual information a person supply in your visitors?
Is going to be back frequently in order to
check out new posts

Johnny
Guest
Johnny

WOW just what I was searching for. Came here by searching for spring

Anonymous
Guest
Anonymous

Howdy! I just wish to give an enormous thumbs up for the good data you will have here on this post.
I will likely be coming back to your weblog for more soon.

http://www.miradeed.com/pd/pd-class_list.asp?db_pd=miniSAS/SAS
Guest
http://www.miradeed.com/pd/pd-class_list.asp?db_pd=miniSAS/SAS

Excellent excited analytical eyesight with regard to details and
may anticipate problems prior to they happen.

Katherina
Guest
Katherina

I every time spent my half an hour to read this blog’s articles everyday along with a cup of coffee.

mca
Guest
mca

By starting an affiliate program, Motor Club Of America is tapping
into all the exposure and advertising that affiliates create without spending a dime on outdated and ineffective advertising strategies.
95 every month after the two months are up for that membership, you will immediately get 200%
commission via $80 for that one person. That is why, when a person’s living pattern is suddenly broken for no apparent reason, it can be the sign of an affair.

dietrich bonhoeffer quotes life together
Guest
dietrich bonhoeffer quotes life together

Hi to all, it’s truly a good for me to pay a visit this website, it consists of important Information.

http://ww.rudenskiy.ru/
Guest
http://ww.rudenskiy.ru/

I used to be suggested this blog through my cousin. I’m now not certain whether this post is written by way of him as no one else know such special about my difficulty. You’re incredible!
Thank you!

Arletha
Guest
Arletha

Howdy! Would you mind if I share your blog with my twitter group?
There’s a lot of people that I think would really enjoy your content. Please let me know. Many thanks

best senuke xcr hosting
Guest
best senuke xcr hosting

The most unique aspect of a virtual private server is that
it provides with the flexibility to add and change modules for
installing your own software, this includes the features and functionality of a dedicated server without the cost of
a dedicated server. Unlike shared hosting, VPS guarantees the dedicated
resources with full control to webmasters which makes it extremely suitable for medium to large websites.
Web hosting services is one of the Denver IT support services which
has became an essential requirement for you if you want to have a sure
success into your company.

seo backlinks analyzer tools
Guest
seo backlinks analyzer tools
Many people aims to optimize their website and gain recognition by the Search Engine. These links are considered as spamming and are ignored by the search engine spiders. Higher page rank internet sites this sort of as Twitter, Facebook or even blog network web sites make it possible for you to develop a cost-free profile on their web-site. The more relevant the website to yours will look good for you and Google will like it to. If the social sites think you are only bookmarking your own site’s links, they could ban you. Link building by the use of content… Read more »
clonazepam
Guest
clonazepam

I’ve learn a few just right stuff here. Definitely worth bookmarking for revisiting. I wonder how a lot effort you set to create this type of great informative site.

why is it called disseminated herpes zoster
Guest
why is it called disseminated herpes zoster

This is the right blog for everyone who would like to understand this topic.
You understand so much its almost tough to argue with you (not that I really would want to_HaHa).
You certainly put a brand new spin on a subject that has been written about
for a long time. Wonderful stuff, just excellent!

Sugar land Limousine
Guest
Sugar land Limousine

To have more idea regarding these cars it is best to dial the toll free customer care numbers.
Based in California, this is reportedly the only
tractor-trailer limo ever built. People will tell you afterward about things that happened and show you pictures
of scenes you’ll have absolutely no recollection of.

Bridget
Guest
Bridget

Way cool! Some very valid points! I appreciate you writing this article and
the rest of the website is also very good.