[SpringRealize 프로젝트] - 자바로 스프링 프레임워크 구현하기
스프링을 이해하기 위해 자바 코드로 스프링을 직접 구현해가는 과정이다.
Spring Framework Core 공식 문서(영문)를 통해 공부하였으므로 의역이 있다.
0. 프로젝트 생성하기
IDE는 이클립스를 이용한다.
File - New - Project... - Spring Starter Project - Next 클릭 ... 를 통해 Spring Legacy Project를 생성했다.
최상위 패키지명은 com.kdh.common 으로 지어주었다.
1. Service, Dao 클래스 만들기
먼저 자바 빈으로 등록할 클래스들을 생성한다.
학생 서비스 인터페이스, 학생 다오 인터페이스 및 각각의 구현체가 필요하다.
dao 패키지 - StudentDao (인터페이스), StudentDaoImpl
service 패키지 - StudentService (인터페이스), StudentServiceImpl
/*
* 서비스 인터페이스
*/
public interface StudentService {
List<String> printStudentNameList();
}
/*
* 서비스 구현체
*/
public class StudentServiceImpl implements StudentService {
StudentDao studentDao;
@Override
public List<String> printStudentNameList() {
return studentDao.getStudentNameList();
}
public StudentDao getStudentDao() {
return studentDao;
}
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}
}
/*
* 다오 인터페이스
*/
public interface StudentDao {
List<String> getStudentNameList();
}
/*
* 다오 구현체
*/
public class StudentDaoImpl implements StudentDao {
List<String> studentList = new ArrayList<String>();
public StudentDaoImpl() {
studentList.add("김길동");
studentList.add("홍길동");
studentList.add("최길동");
}
@Override
public List<String> getStudentNameList() {
return studentList;
}
}
StudentDaoImpl에는 학생 리스트를 만들어 넣어주었다.
2. IoC 컨테이너 만들기
컨테이너를 만들기 위해서는 먼저 xml파일에 bean정의들을 넣어주고, 그 xml파일을 자바로 불러와야 한다.
Service와 Dao의 구조를 정의할 xml파일을 각각 만들어준다.
파일의 경로는 다음과 같다.
service.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="studentService" class="com.kdh.student.service.StudentServiceImpl">
<property name="studentDao" ref="studentDao"/>
</bean>
</beans>
daos.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="studentDao" class="com.kdh.student.dao.StudentDaoImpl">
</bean>
</beans>
서비스와 다오를 각각 빈 객체로 구성해주었다.
이를 이용해 studentService빈을 부르면 StudentServiceImpl이 리턴되고, studentDao빈을 부르면 StudentDaoImpl이 리턴된다.
빈의 이름을 정하기 위해 id 혹은 name 속성을 이용할 수 있으며, id의 경우 전체 빈 중 유일한 값이어야 한다.
3. 컨테이너 구성하기
앞서 만든 xml파일들을 자바에서 불러올 차례이다.
컨테이너 역할을 할 SpringRealizeIocContainer.java 클래스 파일을 하나 생성해준다.
/*
* Ioc 컨테이너
*/
public class SpringRealizeIocContainer {
// xml 파일을 불러온다.
ApplicationContext context = new ClassPathXmlApplicationContext("xml/services.xml", "xml/daos.xml");
public StudentService getStudentService() {
// xml파일에서 beanName에 맞는 빈을 가져온다.
StudentService service = context.getBean("studentService", StudentService.class);
return service;
}
}
getStudentService
() - service.xml, daos.xml 파일을 불러와 빈 구성 정보를 읽은 뒤, studentService 라는 이름의 빈을 찾아서 반환한다.
4. Controller에서 컨테이너 객체 사용하기
MVC 중 C의 역할을 해줄 객체이다.
빈으로 등록해주었던 StudentService 객체를 SpringRealizeIocContainer 클래스를 통해 가져와주었다.
public class StudentController {
StudentService service = new SpringRealizeIocContainer().studentService();
public String viewStudentList () {
return service.printStudentNameList().toString();
}
}
5. 실행시키기
View 역할을 해줄 객체 Run을 _run 이라는 패키지 내부에 생성한다.
_ 를 붙인 이유는 패키지가 맨 위로 오게 하기 위해서이다.
브라우저 없이 실행시키기 위해 main함수를 생성하고, Controller에서 학생목록을 불러와 출력한다.
/*
* 클라이언트 역할을 하는 클래스
*/
public class Run {
public static void main(String [] args) {
System.out.println(new StudentController().viewStudentList());
}
}
실행 결과
Ioc Container객체를 이용해 빈 파일을 읽어와 서비스, 다오를 생성해주었고, 이를 Run.java(View)에 정상적으로 출력하였다.
이어서 xml으로 진행한 설정들을 어노테이션 방식으로 변환한다.
'SpringRealize' 카테고리의 다른 글
[SpringRealize] 스프링 Core 이해하기 - IoC Container (0) | 2021.05.23 |
---|
댓글