@Qualifier is one of the autowiring annotations in spring. @Qualifier annotation can be used to control which bean should be autowire on a property.

Sometimes, it may happen that there are two or more beans, each of which equally qualifies to be wired into a property or a parameter. In such cases, Spring does not decide which one is the right one, instead, it may throw NoUniqueBeanDefinitionException. In this case, @Qualifier annotation will control which bean should be wired on a property.

In order to resolve the exception, we can use @Qualifier annotation along with the autowiring annotation.

Here is the complete example, of @Qualifier annotation usage.

@Qualifier annotation Example :

Project Structure :

@Qualifier Example

Required Dependencies :

pom.xml

[sourcecode language=”xml”]
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
[/sourcecode]

Spring Beans :

College.java

[sourcecode language=”java” highlight=”9-10″]

package com.onlinetutorialspoint.beans;

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

public class College {
    private int collegeId;
    private String collegeName;
    @Autowired
    @Qualifier("cse")
    private Department department;

    public int getCollegeId() {
        return collegeId;
    }

    public void setCollegeId(int collegeId) {
        this.collegeId = collegeId;
    }

    public String getCollegeName() {
        return collegeName;
    }

    public void setCollegeName(String collegeName) {
        this.collegeName = collegeName;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

}
[/sourcecode]

Department.java

[sourcecode language=”java”]

package com.onlinetutorialspoint.beans;

public class Department {
    private int deptId;
    private String deptName;

    public int getDeptId() {
        return deptId;
    }

    public void setDeptId(int deptId) {
        this.deptId = deptId;
    }

    public String getDeptName() {
        return deptName;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

}

[/sourcecode]

spring configuration :

spring configuration.xml

[sourcecode language=”xml” highlight=”12-23″]

<?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-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    <context:component-scan base-package="com.onlinetutorialspoint.beans" />
    <context:annotation-config />
    <bean id="college" class="com.onlinetutorialspoint.beans.College">
        <property name="collegeId" value="10059" />
        <property name="CollegeName" value="CBIT" />
    </bean>
    <bean id="cse" class="com.onlinetutorialspoint.beans.Department">
        <property name="deptName" value="CSE" />
        <property name="deptId" value="101" />
    </bean>
    <bean id="it" class="com.onlinetutorialspoint.beans.Department">
        <property name="deptName" value="INFORMATION TECHNOLOGY" />
        <property name="deptId" value="102" />
    </bean>
    <bean id="mechanical" class="com.onlinetutorialspoint.beans.Department">
        <property name="deptName" value="Mechanical" />
        <property name="deptId" value="103" />
    </bean>
</beans>
[/sourcecode]

 

On the above configuration file, we took 3 different Department beans with different ids. To avoid the ambiguity, while injecting the dependency of Department bean we can use @Qualifier annotation on top of the property.

Run the application :

Main.java

[sourcecode language=”java”]

package com.onlinetutorialspoint.beans;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

    public static void main(String[] args) {
        BeanFactory beanFactory = new ClassPathXmlApplicationContext("springconfiguration.xml");
        College college = (College) beanFactory.getBean("college");
        Department department = college.getDepartment();
        System.out.println("College Name : "+college.getCollegeName());
        System.out.println("Department Id : "+department.getDeptId());
        System.out.println("Department Name : "+department.getDeptName());
    }

}

[/sourcecode]

Output :

College Name : CBIT
Department Id : 101
Department Name : CSE

Happy Learning 🙂

Download Example