2020. 9. 11. 21:08ㆍJava/Spring
RequestScope
- @Autowired 를 활용하여 Bean을 자동으로 주입 받을 수 있다.
- Bean을 정의할 때 request scope로 정의하면 요청이 발생할 때 마다 Bean 객체가 생성되어 자동으로 주입된다.
- 주입된 Bean은 요청 발생시 주입만 이루어지는 것이므로 request 영역에 저장되지는 않는다.
- Xml로 bean을 설정하고 byName으로 주입 받았을 경우에만 request 영역에 자동 저장된다.
- Java 방식은 @RequestScope 를 사용한다.
- XML 방식은 bean을 정의할 때 scope=“request”로 설정한다.
- Bean을 정의할 때 scope를 request로 설정하면 요청이 발생할 때 마다 새로운 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 |