Spring MVC - RequestScope 빈 주입

2020. 9. 11. 21:08Java/Spring

반응형

RequestScope

- @Autowired 를 활용하여 Bean을 자동으로 주입 받을 수 있다.

- Bean을 정의할 때 request scope로 정의하면 요청이 발생할 때 마다 Bean 객체가 생성되어 자동으로 주입된다.

- 주입된 Bean은 요청 발생시 주입만 이루어지는 것이므로 request 영역에 저장되지는 않는다.

- Xmlbean을 설정하고 byName으로 주입 받았을 경우에만 request 영역에 자동 저장된다.

- Java 방식은 @RequestScope 를 사용한다.

- XML 방식은 bean 정의할 때 scope=“request”로 설정한다.

- Bean을 정의할 때 scoperequest로 설정하면 요청이 발생할 때 마다 새로운 bean이 주입된다.

 


Java를 이용한 빈객체 주입

 

1. 빈 객체로 등록 할 객체를 생성한다.

public class DataBean1 {
	
	private String data1;
	private String data2;
	
	public String getData1() {
		return data1;
	}
	public void setData1(String data1) {
		this.data1 = data1;
	}
	public String getData2() {
		return data2;
	}
	public void setData2(String data2) {
		this.data2 = data2;
	}
	
	
}

2. RootAppContext에 추가하여 객체를 빈 객체로 등록한다.

@Configuration
public class RootAppContext {
	@Bean
	@RequestScope
	public DataBean1 dataBean1() {
		return new DataBean1();
	}
}

3. Controller에서 @Autowired를 통해 자동주입으로 빈 객체를 가져온다.

@Controller
public class TestController {

	@Autowired
	DataBean1 requestBean1;
	
	@GetMapping("/test1")
	public String test1() {
		
		requestBean1.setData1("문자열1");
		requestBean1.setData2("문자열2");
		
		return "forward:/result1"; 
	}
	
	@GetMapping("/result1")
	public String result1(Model model) {
		
		System.out.println(requestBean1.getData1());
		System.out.println(requestBean1.getData2());
		
		model.addAttribute("requestBean1",requestBean1);
		
		return "result"; 
	}
}

가져온 객체를 세팅하고 model을 이용하여 request 객체로 전달한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>result</h1>
<h3>requestBean1.data1: ${requestScope.requestBean1.data1}</h3>
<h3>requestBean1.data2: ${requestScope.requestBean1.data2}</h3>
</body>
</html>

Jsp에서 위와 같이 받는다.

 

결과는 아래와 같다.


XML을 이용한 빈객체 주입

 

빈 객체 등록만 다르고 나머지는 동일하다.

 

1. 빈 객체를 스캔하기위해 servlet-context.xml에 다음을 추가한다.

<context:component-scan base-package="cookingcoding.bean"/>

2. root-context.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 class="cookingcoding.bean.DataBean1" scope="request" />				   
</beans>

3.Controller의 주입되는 객체에 @Lazy를 추가한다.

@Autowired
@Lazy
DataBean1 requestBean1;

정상적으로 출력된다.

 

XML도 Model을 통해 request 객체에 담아서 보내줘야하지만 빈 객체를 byName으로 주입한다면 자동으로 request 객체에 담겨서 전송된다.

반응형

'Java > Spring' 카테고리의 다른 글

Spring MVC - ApplicationScope  (0) 2020.09.14
Spring MVC - SessionScope  (0) 2020.09.13
Spring MVC - RequestScope  (0) 2020.09.11
Spring MVC - Redirect, Forward  (0) 2020.09.10
Spring MVC - Form 커스텀 태그 요소(select,checkbox,radio)  (0) 2020.09.09