Spring IoC예제(Map, List를 통한 DI):namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
지금까지 예제에서 의존성 주입은 모두 POJO빈을 통한 주입을 하였다. 하지만 주로 사용하는 것이 일반적인 Java Bean Class 이지만, Spring의 의존성 주입은 java.util의 컬렉션 타입인 Map과 List 등을 통한 주입도 지원 해주고 있다.
1. 컬렉션을 통한 의존성 주입
이번 예제는 실전에서는 어떻게 보면 흔히 사용되지는 않는 개발방 법이다(국내에서는...) 그렇기 때문에 한번에 List와 Map 타입에 관한 방법 모두 테스트해 본다. 먼저 각각 List와 Map 타입의 의존성 주입을 받을 두개의 Class를 생성한다.
ListController.java
package spring.ex1;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.mvc.AbstractController;
public class ListController extends AbstractController {
private List listBean;
public void setListBean(List listBean) {
this.listBean = listBean;
}
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception{
ModelAndView mav = new ModelAndView();
mav.setViewName("/ListBean");
mav.addObject("listBean",listBean);
return mav;
}
}
MapController.java
package spring.ex1;
private List listBean;
public void setListBean(List listBean) {
this.listBean = listBean;
}
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception{
ModelAndView mav = new ModelAndView();
mav.setViewName("/ListBean");
mav.addObject("listBean",listBean);
return mav;
}
}
MapController.java
package spring.ex1;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.mvc.AbstractController;
public class MapController extends AbstractController{
private Map mapBean;
public void setMapBean(Map mapBean) {
this.mapBean = mapBean;
}
private Map mapBean;
public void setMapBean(Map mapBean) {
this.mapBean = mapBean;
}
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception{
ModelAndView mav = new ModelAndView();
mav.setViewName("/MapBean");
mav.addObject("mapBean",mapBean);
return mav;
}
}
지금 까지의 예제를 실행해 봤다면 이번 예제 역시 특별한 것은 없다고 생각 될 것이다.의존성 주입은 setter 메서드를 통해 주입 하였고, 단지 setter 메서드에 사용된 private 레퍼런스가 컬렉션 타입은 java.util.List와 java.util.Map으로 지정했을 뿐이다.
HttpServletResponse response) throws Exception{
ModelAndView mav = new ModelAndView();
mav.setViewName("/MapBean");
mav.addObject("mapBean",mapBean);
return mav;
}
}
지금 까지의 예제를 실행해 봤다면 이번 예제 역시 특별한 것은 없다고 생각 될 것이다.의존성 주입은 setter 메서드를 통해 주입 하였고, 단지 setter 메서드에 사용된 private 레퍼런스가 컬렉션 타입은 java.util.List와 java.util.Map으로 지정했을 뿐이다.
자, 그럼 xml 설정에 수정된 부분을 보도록 한다.
dispatcher-servlet.xml
<bean name="/ListBean.htm" class="spring.ex1.ListController">
<property name="listBean">
<list>
<value>Hello World!!</value>
<value>Nice to meet you!!</value>
<value>good luck to you!!</value>
</list>
</property>
</bean>
<bean name="/MapBean.htm" class="spring.ex1.MapController">
<property name="mapBean">
<map>
<entry>
<key><value>prop1</value></key>
<value>Hello World!!</value>
</entry>
<entry>
<key><value>prop2</value></key>
<value>Nice to meet you!!</value>
</entry>
<entry>
<key><value>prop3</value></key>
<value>Good luck to you!!</value>
</entry>
</map>
</property>
</bean>
일단 두가지 컬렉션 모두 property 에 이름은 정해 줘야 한다. 이점은 다른 의존성 주입에도 동일한 것이라고 생각하면 된다.
여기서 새로운 점은, property태그의 자식 태그로서 각각 <list>와 <map> 태그가 들어간다는
것이다.
예제에서 list의 경우 <value>태그를 이용하여 String의 값으로 list의 값을 저장 하였고, map의 경우 역시 <value> 태그를 통해 저장하였지만, 그 앞에 <key><value></value></key> 값으로 key 값을 따로 저장하였다는 것을 알 수 있다.
이는 각각 JAVA 코딩으로 보면
<list>
<value>Hello World!!</value>
<value>Nice to meet you!!</value>
<value>good luck to you!!</value>
</list>
이 부분은 아래와 같은 효과를 나타 낼 수 있고,
listBean.add("Helo Wolrd!!");
listBean.add("Nice to meet you!!");
listBean.add("good luck to you!!");
맵 부분을 살펴보면
<map>
<entry>
<key><value>prop1</value></key>
<value>Hello World!!</value>
</entry>
<entry>
<key><value>prop2</value></key>
<value>Nice to meet you!!</value>
</entry>
<entry>
<key><value>prop3</value></key>
<value>Good luck to you!!</value>
</entry>
</map>
이 부분은 아래와 같은 효과를 나타 낼 수 있다.
mapBean.put("prop1", "Hello World!!");
mapBean.put("prop2", "Nice to meet you!!");
mapBean.put("prop3", "Good luck to you!!");
결과를 보면 다음과 같이 나타 낼 수 있다.
이제 이 컬렉션들을 ModelAndView 객체에 담아 뿌려줄 JSP 페이지를 생성한다.
ListBean.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<c:if test="${not empty listBean}">
<c:forEach items="${listBean}" var="bean">
<b>${bean}</b><br>
</c:forEach>
</c:if>
</body>
</html>
MapBean.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<c:if test="${not empty mapBean}">
<b>${mapBean.prop1 }</b><br>
<b>${mapBean.prop2 }</b><br>
<b>${mapBean.prop3 }</b><br>
</c:if>
</body>
</html>
JSP 페이지를 보니 특별한 태그가 보일 것이다. 이 태그는 JSTL 로서, JSP페이지에서 사용되는 문법을 스크립트릿을 사용하지 않고 태그 형식의 문법으로 사용하는 프레임워크 이다.
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<c:if test="${not empty listBean}">
<c:forEach items="${listBean}" var="bean">
<b>${bean}</b><br>
</c:forEach>
</c:if>
</body>
</html>
MapBean.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<c:if test="${not empty mapBean}">
<b>${mapBean.prop1 }</b><br>
<b>${mapBean.prop2 }</b><br>
<b>${mapBean.prop3 }</b><br>
</c:if>
</body>
</html>
JSP 페이지를 보니 특별한 태그가 보일 것이다. 이 태그는 JSTL 로서, JSP페이지에서 사용되는 문법을 스크립트릿을 사용하지 않고 태그 형식의 문법으로 사용하는 프레임워크 이다.
JSTL을 사용하기 위해서는 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 에서tld 파일을 사용하겠다는 것을 지정해 주어야 한다.
JSTL에 대해 자세히 나가지는 않을 예정이지만 이번 예제에 사용된 문법들을 간단히 설명 하자면 ListBean.jsp 에서 사용된 태그는 <c:if>문과 <c:forEach> 문이다.
c:if 문은 test 속성을 통해 기본적으로 관계 연산자나 eq(JAVA의 equals와 같다.)를 통한 객체 비교, 등을 할 수 있고, null 값 비교를 위해 예제와 같이 not empty(객체가 있다면)나 empty(객체가 null일 경우)등을 비교 할 수 있다.
c:forEach 문은 begin, end 속성을 통해 for 문과 같이 사용할 수도, true, false 값을 통해 while 문과 같이 사용될 수 도 있다.
예제를 보자면 만약 객체인 item으로 지정된 ${listBean} 이 있다면, 루프를, 객체가 없거나, 모든 객체를 사용하면 루프를 종료한다.
MapBean.jsp를 보자면 c:if 문의 사용법은 같다.
중요한 것은 Map에 들어 있는 객체를 ModelAndView 객체에서 담아온 mapBean과 xml에서 지정한 key 값을 합쳐 mapBean.prop 과 같은 형식으로 데이터를 보여준다.
결과를 보면 다음과 같다.
http://localhost:8080/SpringEx/ListBean.htm
:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
2. 기본 타입을 통한 의존성 주입
지금까지 의존성 주입 예제를 해 보았다면 사실 기본 타입에 관한 예제는 해 볼 필요도 없이 간단하다.때문에 해보지 않고 간단히 이렇게 사용할 수 있다는 점만을 xml 파일에 정의하도록 보여준다.
예제가 해보고 싶은 사람은 직접 컨트롤러를 만들어 시도해 보는 것도 도움이 될 것이다.
지금까지 의존성 주입 예제를 해 보았다면 사실 기본 타입에 관한 예제는 해 볼 필요도 없이 간단하다.때문에 해보지 않고 간단히 이렇게 사용할 수 있다는 점만을 xml 파일에 정의하도록 보여준다.
예제가 해보고 싶은 사람은 직접 컨트롤러를 만들어 시도해 보는 것도 도움이 될 것이다.
<bean name="/aa.htm" class="..">
<property name="">
<value type="java.lang.Integer"></value>
</property>
<property name="">
<value type="java.lang.Float"></value>
</property>
<property name="">
<value type="java.lang.String"></value>
</property>
</bean>
기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… | 12-27 | 2250 | ||
[채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1617 | ||
53 | [평일주간100%환급]Spring,JAVA,JSP,안드로이드,C#닷넷,SQL,튜닝… | 03-15 | 1411 | |
52 | [주말]C#,ASP.NET마스터 | 01-31 | 1530 | |
51 | [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… | 01-31 | 1768 | |
50 | [기업100%환급]개발자를위한스프링,마이바티스,하이버네이트(스… | 01-31 | 1219 | |
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 | 01-19 | 1512 | |
48 | [평일주간,평일야간,주말]안드로이드개발자과정 | 01-11 | 1343 | |
47 | [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… | 01-03 | 1879 | |
46 | 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… | 12-27 | 2250 | |
45 | [기업100%환급]자바웹개발기초과정(JAVA,JDBC,JSP,Servlet,Aajx,… | 12-19 | 1617 | |
44 | [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… | 12-14 | 1588 | |
43 | [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1617 | |
42 | [주말주간]자바&웹,jQUERY,스프링프레임워크 | 12-09 | 1291 | |
41 | [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1511 | |
40 | [기업100%환급]자바기초&안드로이드개발자과정(Android전액환급… | 12-01 | 1693 | |
39 | [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) | 12-01 | 1162 |
댓글 없음:
댓글 쓰기