In
real world application, we always code for interfaces. If you provide
@Autowired annotation on top of any interface reference, spring automatically
picks the implementation of this interface. If more than one class implements
the interface, then we need to specify which class instance to be injected.
Example
public
interface EmployeeService {
public List<String>
getEmployeeNames();
}
public
class EmployeeServiceImpl implements EmployeeService{
}
public
class Test {
@Autowired
private EmployeeService service;
}
Notify
above snippeet, Test class used @Autowired annotation on top of
EmployeeService. Actually EmployeeService is an interface, so spring tries to
find out the implementation of EmployeeService intetface and inject the
instance of EmployeeService implementation.
Following
is the complete working application.
Employee.java
package com.sample.pojo; public class Employee { private int id; private String firstName; private String lastName; public int getId() { return id; } public void setId(int id) { this.id = id; } 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; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Employee [id=").append(id).append(", firstName=").append(firstName).append(", lastName=") .append(lastName).append("]"); return builder.toString(); } }
EmployeeService.java
package com.sample.service; import java.util.List; public interface EmployeeService { public List<String> getEmployeeNames(); }
EmployeeServiceImpl.java
package com.sample.service.impl; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import com.sample.pojo.Employee; import com.sample.service.EmployeeService; public class EmployeeServiceImpl implements EmployeeService { @Autowired public List<Employee> employees; @Override public List<String> getEmployeeNames() { List<String> names = new ArrayList<>(); for (Employee emp : employees) { names.add(emp.getFirstName() + ", " + emp.getLastName()); } return names; } }
Test.java
package com.sample.test; import org.springframework.beans.factory.annotation.Autowired; import com.sample.service.EmployeeService; public class Test { @Autowired private EmployeeService service; public EmployeeService getService() { return service; } public void setService(EmployeeService service) { this.service = service; } }
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="1" class="com.sample.pojo.Employee"> <property name="id" value="1" /> <property name="firstName" value="Hari Krishna" /> <property name="lastName" value="Gurram" /> </bean> <bean id="2" class="com.sample.pojo.Employee"> <property name="id" value="2" /> <property name="firstName" value="Kiran" /> <property name="lastName" value="Kumnoor" /> </bean> <bean id="3" class="com.sample.pojo.Employee"> <property name="id" value="3" /> <property name="firstName" value="Sravya" /> <property name="lastName" value="Guruju" /> </bean> <bean id="empService" class="com.sample.service.impl.EmployeeServiceImpl" /> <bean id="test" class="com.sample.test.Test" /> </beans>
HelloWorld.java
package com.sample.test; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class HelloWorld { public static void main(String args[]) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "myConfiguration.xml" }); Test test = context.getBean("test", Test.class); List<String> names = test.getService().getEmployeeNames(); for (String name : names) { System.out.println(name); } ((ClassPathXmlApplicationContext) context).close(); } }
Output
Hari Krishna, Gurram Kiran, Kumnoor Sravya, Guruju
No comments:
Post a Comment