CAFE

함께풀어보기

Re: 스프링 DI REF 해보기 <팀별 연습문제>B 팀

작성자최원철|작성시간26.06.22|조회수10 목록 댓글 0

Ex4MySome

 

package ex2;

public class Ex4MySome {
//1) 스프링 주입 값 - value
private String msg;

//2)
//string bean 에서 의존성 주입을 하기 위해서는 setter를 정의해줘야한다.
//setter == property
public void setMsg(String msg) {
this.msg = msg;
}
//ref에서 참조할 메서드
public String someMessage() {
return "여기는 Ref에서 사용될 값" + msg;
}
}

Ex4_SomeRef

package ex2;

public class Ex4_SomeRef {
// 스프링 주입 참조 값(주소)
private Ex4MySome ref;

// setter
// string bean 에서 의존성 주입을 하기 위해서는 setter를 정의해줘야한다.
// setter == property
// 서블릿에서 getbeans 메서드를 통해 Ex4MySome 생성 및 값을 초기화 한 후
// Ex4_SomeRef 객체에 Ex4MySome ref에 의존성(DI : 객체 생성 및 값 세팅)을 주입해준다.
public void setRef(Ex4MySome ref) {
this.ref = ref;
}

// 스프링의 DI를 통해서 Ex4MySome에 메서드를 사용할 수 있다.
public String printsomeMessage() {
return ref.someMessage();
}
}

 

ex4.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">
<bean id="some" class="ex2.Ex4MySome">
<!-- 아래 두개를 합쳐서 DI -->
<!-- Ex4MySome some = new Ex4MySome() -->
<!-- some.setMsg("some 에서 가져오는 메세지입니다.") -->
<property name="msg" value="some 에서 가져오는 메세지입니다."></property>
</bean>
<!--ref 속성의 값으로 some을 사용함으로써 Ex4_SomeRef 멤버에 정의된 ref 변수에 의존성 주입을 해준다.  -->
<bean id="somref" class="ex2.Ex4_SomeRef">
<property name="ref" ref="some"></property>
</bean>

</beans>

 

Ex4Servlet

package ex2;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

@WebServlet("/ex4Servlet")
public class Ex4Servlet extends HttpServlet {
//spring에서 제공해주는 DI 기능을 사용하기 위한 객체
private ApplicationContext ctx;

@Override
public void init() throws ServletException {
//서블릿에서 제공해주는 최초로 한번 실행하는 init을 통해 bean.xml에 정의한
//bean을 다 가져온다
ctx = new GenericXmlApplicationContext("ex2/ex4.xml");
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//init에서 생성된 ctx를 통해 싱글톤으로 객체(bean)들이 생성되었기 때문에 getBean를 통해서 사용할 참조값을
//가져온다.
Ex4_SomeRef ref = ctx.getBean("somref", Ex4_SomeRef.class);
//참조값을 통해 해당 메서드(자원)에 접근(사용)한다.
String msg = ref.printsomeMessage();
//서블릿 forward방식(HttpServletRequest 한번만 생성 후 공유)으로 보내기 위해 setAttribute를 해준다.
req.setAttribute("msg", msg);
//보낼 경로를 지정해주고 forward 해준다.
req.getRequestDispatcher("ex1_hello.jsp").forward(req, resp);

}
}

ex1_hello 재활용 함

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>Spring hello</h1>
<p>${msg}</p>
</body>
</html>

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼