If
there are multiple beans available for the same type, spring don't know which
bean to inject. You need to specify which bean to take, when more than one bean
of same type are available. By using @Primary annotation (or) primary attribute,
you can achieve this.
Example
<bean id="osho" class="com.sample.pojo.Author" primary="true"> <property name="firstName" value="Chandra Mohan" /> <property name="lastName" value="Jain" /> <property name="dateOfBirth" value="11 December 1931" /> <property name="country" value="India" /> </bean> <bean id="krishna" class="com.sample.pojo.Author"> <property name="firstName" value="Hari Krishna" /> <property name="lastName" value="Gurram" /> <property name="dateOfBirth" value="05 may 1989" /> <property name="country" value="India" /> </bean>
Out
of above two beans, I added primary attribute to the bean with id 'osho',
spring always use the bean with id 'osho' in case of conflict.
Author.java
package com.sample.pojo; public class Author { private String firstName; private String lastName; private String dateOfBirth; private String country; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(String dateOfBirth) { this.dateOfBirth = dateOfBirth; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Author [firstName=").append(firstName).append(", lastName=").append(lastName) .append(", dateOfBirth=").append(dateOfBirth).append(", country=").append(country).append("]"); return builder.toString(); } }
myConfiguration.xml
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config /> <bean id="osho" class="com.sample.pojo.Author" primary="true"> <property name="firstName" value="Chandra Mohan" /> <property name="lastName" value="Jain" /> <property name="dateOfBirth" value="11 December 1931" /> <property name="country" value="India" /> </bean> <bean id="Krishna" class="com.sample.pojo.Author"> <property name="firstName" value="Hari Krishna" /> <property name="lastName" value="Gurram" /> <property name="dateOfBirth" value="05 may 1989" /> <property name="country" value="India" /> </bean> </beans>
HelloWorld.java
package com.sample.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.sample.pojo.Author; public class HelloWorld { public static void main(String args[]) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "myConfiguration.xml" }); Author author1 = context.getBean(Author.class); Author author2 = context.getBean(Author.class); Author author3 = context.getBean(Author.class); System.out.println(author1); System.out.println(author2); System.out.println(author3); ((ClassPathXmlApplicationContext) context).close(); } }
Output
Author [firstName=Chandra Mohan, lastName=Jain, dateOfBirth=11 December 1931, country=India] Author [firstName=Chandra Mohan, lastName=Jain, dateOfBirth=11 December 1931, country=India] Author [firstName=Chandra Mohan, lastName=Jain, dateOfBirth=11 December 1931, country=India]
No comments:
Post a Comment