본문 바로가기

JAVA/Spring

[Spring] 기존 MVC방식부터 스프링까지 간단한 프로젝트 생성 (2)

<이전 내용>

https://codevision.tistory.com/11

 

[Spring] 기존 MVC방식부터 스프링까지 간단한 프로젝트 생성 (1)

https://youtu.be/XtXHIDnzS9c?list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T 프로젝트는 그레이들로 생성한다. 이클립스에 그레이들을 설치하는 방법은 아래 포스트 참고. https://codevision.tistory.com/9 [JDBC] (이클립스/MVC)

codevision.tistory.com

 

<스프링 세팅파일 생성>

물론 이클립스에 스프링 플러그인이 깔려있는 상태여야 한다. 상위 패키지에서 오른쪽 마우스 > New를 누른다. setting.xml 등의 이름으로 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 http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

 

아마 위와 같은 내용이 미리 써져있을 것이다. 이제 이곳에 스프링 코드로 클래스 조립을 지시할 수 있다. 일종의 지시서라고 보면 된다.

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- Exam exam = new ExamImpl();  -->
	<bean id="exam" class="spring.di.entity.ExamImpl" />
	<!-- Examconsole console = new GridExamConsol(exam); -->
	<bean id="console" class="spring.di.ui.InlineExamConsole">
	<!-- console.setExam(exam); -->	
		<!-- <property name="setExam"></property> 문법상 메소드 이름에서 set을 빼준다-->
		<property name="exam" ref="exam"></property>
	</bean>

</beans>

Program 메인에서 조립했던 내용을 위와 같이 지시할 수 있다.

Exam인터페이스를 구현한 exam 인스턴스 생성
ExamConsole인터페이스를 구현한 console 인스턴스 생성
java xml
Exam exam = new ExamImpl();
ExamConsole console = new GridExamConsol(exam);
<bean id="exam" class="spring.di.entity.ExamImpl" />
<bean id="console" class="spring.di.ui.InlineExamConsole">
여기서 console인스턴스 내에 exam세터를 설정
java xml
console.setExam(exam); <property name="setExam" ref="exam"></property>
<property name="exam" ref="exam"></property>

여기서 주의해야하는 부분은 메소드 name 값을 세터 이름 그대로 setExam이라 쓰면 안되고, set을 제외하고 앞을 소문자로 바꿔 exam이라고 써야한다는 부분이다. 덧붙여 데이터형이 참조형이면 ref를, 원시형이면 value를 써준다. 얘기가 나왔으니 원시형 데이터 값도 설정해본다. ExamImpl 내에 있는 멤버 변수를 설정한다. 원시형으로 보니 더 직관적이다. name에는 그냥 멤버 변수 이름을 쓰면 된다. 

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="exam" class="spring.di.entity.ExamImpl">
		<property name="kor">
			<value>10</value>	
		</property>
		<property name="eng" value="20" />
		<property name="math" value="30" />
		<property name="com" value="40" />
	</bean>
	<bean id="console" class="spring.di.ui.InlineExamConsole">
		<property name="exam" ref="exam"></property>
	</bean>

</beans>

아참, 당연히 롬복등으로 값을 설정할 클래스 내에 세터 메소드를 생성해놔야한다.

위와 같이 스프링 지시서를 작성하고 다시 Program 메인으로 넘어온다.

 

Program.java

package spring.di;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.di.entity.Exam;
import spring.di.entity.ExamImpl;
import spring.di.ui.ExamConsole;
import spring.di.ui.GridExamConsole;
import spring.di.ui.InlineExamConsole;

public class Program {
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("spring/di/setting.xml");
		// Examconsole console = (Examconsole) context.getBean("console");
		ExamConsole console = context.getBean(ExamConsole.class);
		console.print();
	}
}

전에 일일히 선언하고 인스턴스를 생성하고 조립했던 과정을 아까 작성했던 스프링 지시서를 불러와 위와 같이 대체 할 수 있다. 물론 지금 단계에선 이 방법이 더 복잡해 보일 수 있다. 그러나 자세히 보면 ApplicationContext는 스프링 세팅 파일 경로를 설정하는 코드이고 조립 코드는 두 줄로 줄어든 것을 볼 수 있다. getBean에서 매개변수를 .class로 받으면 캐스팅 또한 따로 할 필요 없다. 

 

자 이제 출력해보자.

잘 나온다.

728x90