Spring MVC 4 Autowire Example
Spring MVC 4 Autowire Example shows a real time implementation of autowiring a bean to required service.
Spring @Autowired annotation is used for autowiring a bean to constructor, setter method, property or methods.
Following are the different ways we can do autowire feature
- Auto-Wiring "no" -> This is default mode means no autowiring
- Auto-Wiring "byName" -> This means autowiring happens using the matching property name
- Auto-Wiring "byType" -> This means autowiring happens using the matching type
- Auto-Wiring "constructor" -> This means autowiring happens through constructor according to the exact arguments
You can see the project structure below
StudentService.java
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Service;
import com.student.domain.Student;
@Service("StudentService")
public class StudentService {
public List<Student> getAllStudents() {
List<Student> Students = new ArrayList<Student>();
Student student = new Student();
student.setName("Rockey");
Students.add(student);
student = new Student();
student.setName("Jose");
Students.add(student);
return Students;
}
public Student getStudentById(int StudentId) {
Student student = null;
if (StudentId == 1) {
student = new Student();
student.setName("Jose");
}else{
student = new Student();
student.setName("Invalid Student");
}
return student;
}
}
StudentController.java
In StudentController class, we have added @RestController annotation which removing the need to add @ResponseBody to each of your @RequestMapping methods.
@RequestMapping annotation is used for mapping web requests to corresponding handler classes and handler methods
@Autowired annotation is used for autowiring "StudentService" on StudentController
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.student.dao.StudentService;
import com.student.domain.Student;
@RestController
@RequestMapping("/service/student/")
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping(method = RequestMethod.GET, headers = "Accept=application/json")
public List<Student> getAllStudents() {
List<Student> Students = studentService.getAllStudents();
return Students;
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET, headers = "Accept=application/json")
public Student getStudentById(@PathVariable int id) {
Student Student = studentService.getStudentById(id);
return Student;
}
}
rest-servlet.xml
The name for rest-servlet.xml is must match the servlet-name we have provided on web.xml. In our case we have provided servlet-name as rest, so we need to append "-servlet.xml"
Below code is used for Spring auto detection feature of finding the packages where the controller is defined
<context:component-scan base-package="com.student.controller" />
<context:component-scan base-package="com.student.dao" />
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <context:component-scan base-package="com.student.controller" /> <context:component-scan base-package="com.student.dao" /> <mvc:annotation-driven /> </beans>
spring-service.xml
We are defining a new bean "studentService" inside spring-service.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <bean id="studentService" class="com.student.dao.StudentService" /> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring-service.xml </param-value> </context-param> <display-name>Spring MVC Rest</display-name> <servlet> <servlet-name>rest</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>rest</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
Run