How @Qualifier and @Primary Annotation works in Spring
@Qualifier and @Primary Annotation both used in auto wiring of beans
@Primary Annotation
@Primary Annotation is used to mark a spring as default primary bean for injection candidate if container one more bean candidate for a injection bean location.
@Qualifier Annotation
@Qualifier Annotation allow to identify a particular bean when more the one bean implementation found for auto wiring during resolution time of bean object injection by spring container .
Following code example illustrate the working these annotation
Employee.java
package in.jk.spring.autowired.test;
public interface Employee {
public String toString();
}
Developer.java
package in.jk.spring.autowired.test;
public class Developer implements Employee {
@Override
public String toString() {
return "Developer Bean";
}
}
DeveloperQualifier.java
package in.jk.spring.autowired.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.beans.factory.annotation.Qualifier;
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface DeveloperQualifier {
}
Manager.java
package in.jk.spring.autowired.test;
public class Manager implements Employee {
@Override
public String toString() {
return "Manager Bean";
}
}
ManagerQualifier.java
package in.jk.spring.autowired.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.beans.factory.annotation.Qualifier;
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface ManagerQualifier {
}
BeanConfiguration.java
package in.jk.spring.autowired.test;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
public class SpringConfig {
@Bean
@Primary
@DeveloperQualifier()
public Employee getJavaEmp() {
return new Developer();
}
@Bean
@ManagerQualifier()
public Employee getManeger() {
return new Manager();
}
}
TestBean.java
package in.jk.spring.autowired.test;
import org.springframework.beans.factory.annotation.Autowired;
public class TestBean {
@Autowired
@DeveloperQualifier()
Employee developer;
@Autowired
@ManagerQualifier
Employee manager;
public void printEmpoyee() {
System.out.println(developer);
System.out.println(manager);
}
}
SpringApplication.java
package in.jk.spring.autowired.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringApplication {
public static void main(String[] args) {
ApplicationContext applicationContext = null;
applicationContext =new ClassPathXmlApplicationContext("context.xml");
SpringConfig configuration = (SpringConfig ) applicationContext.getBean("config");
TestBean testBean = (TestBean) applicationContext.getBean("testBean");
testBean.printEmpoyee();
}
}
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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 />
<context:component-scan
base-package="in.jk.spring.config" />
<context:property-placeholder
location="classpath:application.properties" />
<bean id="testBean" class="in.jk.spring.autowired.test.TestBean">
</bean>
<bean id="config"
class="in.jk.spring.autowired.test.SpringConfig ">
</bean>
</beans>
No comments:
Post a Comment