Spring Boot Autowired

Annotation

Name Note
@Component Register Spring DI
@Service Almost all same as @Component, but it is Business Logic. It should be used in Service
@Autowirted Inject bean automatically

Component in Service

com.atmarkplant.SptringTest.bean.ExampleDAO.java

public interface ExampleDAO {
	public String find();
}

This is just interface

com.atmarkplant.SptringTest.bean.ExampleDAOImpl

@Component
public class ExampleDAOImpl implements ExampleDAO {

	@Override
	public String find() {
		return "Test";
	}
}

This is actual implementation for ExampleDAO.
This class has @Component

com.atamrkplant.SpringTest.controller

@Service
public class TestServiceImpl implements TestService {

	@Autowired
        private ExampleDAO exampleServoce;
	
	@Override
	public ServiceBean getBean() {
		
		exampleServoce.find();   // In
		
		ServiceBean bean = new ServiceBean();
		bean.setId(1);
		bean.setName("Tiger");
		return bean;
	}

	@Override
	public ServiceBean createBean(Integer id, String name) {
		ServiceBean bean = new ServiceBean();
		bean.setId(id);
		bean.setName(name);
		return bean;
	}
}

Service in Controller

com.atmarkplant.SpringTest.bean.ServiceBean

@Data
public class ServiceBean {
	private Integer id;
	
	private String name;
}

com.atmarkplant.SpringTest.controller.TestService

@Service
public interface TestService {

	public ServiceBean getBean();
	
	public ServiceBean createBean(Integer id, String name);
}

This is Service interface.

com.atmarkplant.SpringTest.controller.TestServiceImpl

@Service
public class TestServiceImpl implements TestService {

	@Autowired
        private ExampleDAO exampleServoce;
	
	@Override
	public ServiceBean getBean() {
		
		exampleServoce.find();
		
		ServiceBean bean = new ServiceBean();
		bean.setId(1);
		bean.setName("Tiger");
		return bean;
	}

	@Override
	public ServiceBean createBean(Integer id, String name) {
		ServiceBean bean = new ServiceBean();
		bean.setId(id);
		bean.setName(name);
		return bean;
	}
}

Use this service in controller
com.atmarkplant.SpringTest.controller.TestController

@RestController
public class TestController {

	@Autowired
	TestService testService;
	
	@RequestMapping("/test")
	@ResponseBody
	public String getTest() {
		ServiceBean bean = testService.getBean();
		return bean.getName();
	}
}

So far, Service and its Interface and Controller are same package.

Ref


@Autowiredと@Serviceアノテーションで、Dependency Injectionしてみる。