In Spring, “Autowiring by Constructor” is actually autowiring by Type in constructor argument. It means, if data type of a bean is same as the data type of other bean constructor argument, auto wire it.

See a full example of Spring auto wiring by constructor.

1. Beans

Two beans, developer and language.

package com.tuts.heomi.netmon;

public class Developer {
	private Language language;

	public Developer(Language language) {
		this.language = language;
	}

	@Override
	public String toString() {
		return "Developer [language=" + language + "]";
	}
	
}
package com.tuts.heomi.netmon;

public class Language {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Language [name=" + name + "]";
	}

}

2. Spring Wiring

Normally, you wire the bean via constructor like this :

	<bean id="developer" class="com.tuts.heomi.netmon.Developer">
		<constructor-arg>
			<ref bean="language" />
		</constructor-arg>
	</bean>
		
	<bean id="language" class="com.tuts.heomi.netmon.Language" >
		<property name="name" value="Java" />
	</bean>

Output

Developer [language=Language [name=Java]]

With autowire by constructor enabled, you can leave the constructor property unset. Spring will find the compatible data type and wire it automatcailly.

	<bean id="developer" class="com.tuts.heomi.netmon.Developer" autowire="constructor" />
		
	<bean id="language" class="com.tuts.heomi.netmon.Language" >
		<property name="name" value="Java" />
	</bean>

Output

Developer [language=Language [name=Java]]

Download Source Code

$ git clone https://github.com/favtuts/java-spring-tutorials.git
$ cd SpringAutoWiringByConstructor

References

  1. Spring DI via constructor
  2. Spring Autowiring by Type
  3. Spring Autowiring @Qualifier example
  4. Spring Auto-Wiring Beans
  5. Spring Auto-Wiring Beans with @Autowired annotatio…
  6. Spring Autowiring by Name
  7. Spring Autowiring by Type

Leave a Reply

Your email address will not be published. Required fields are marked *