스프링에서 @SessionScope가 헷갈려서 정리를 해본다.
먼저 자바클래스에 이렇게 설정을 해준다
//프로젝트 작업시 사용할 bean을 정의하는 클래스
@Configuration
public class RootAppContext {
//설정 이외의 Bean들
//데이터나 관리 목적의 Bean은 여기에다가 저장해서 사용한다.
@Bean("loginUserBean")
@SessionScope
public UserBean loginUserBean() {
return new UserBean();
}
}
UserBean 객체는 loginUserBean이라는 이름을 가지고
세션영역에 저장이 된다.
애매한게 @SessionScope를 사용하면 세션영역에 저장이 되는거같은데
언제 저장이 되는것일까?
바로 정답은 @SessionScope가 붙어져있던 빈이 주입되는 시점이다.
이제 컨트롤러에서 주입하고 사용하는 것을 봐보자.
@Controller
public class HomeController {
@Resource(name = "loginUserBean")
private UserBean loginUserBean;
@RequestMapping(value ="/", method = RequestMethod.GET)
public String home() {
System.out.println(loginUserBean);
return "redirect:/main";
}
}
이렇게 컨트롤러가 되어있다면
@Resource를 통해서 loginUserBean이 주입될 것이다.
이때 바로 세션의 영역의 시작된다.
그래서 바로 밑 메소드인
@RequestMapping(value ="/", method = RequestMethod.GET)
public String home() 을 보면
syso이 있는데
콘솔에도
이렇게 정상적으로 찍히게 된다.
아 그리고 주의 할 점은
이렇게 주입이 되어도 바로 jsp에서 사용할 수 있는것은 아니다.
jsp에서 ${}을 통해 출력을 진행하면 아무값도 나오게 되지 않을 것이다
왜냐하면
SessionScope를 통해서 Bean이 세션 영역에 담기기만 한 것이지
modelAttribute등을 통해서 jsp와 연결된 것은 아니기 때문이다.
그래서 이제 jsp에서 사용을 하려면
model.addAttribute 등을 통해서 전달을 해주어야 하고
그제서야 ${}를 사용시에 화면에서도 출력이 가능 할 것이다.
쿼리스트링과 주소변수 매핑의 차이점 (0) | 2022.06.21 |
---|---|
스프링 어노테이션으로 DB 연결하기 (0) | 2022.03.30 |
스프링에서 Bean을 만드는 방법(자바 DTO 작성법) (0) | 2022.03.30 |
스프링 <c:url> 예제 (<c:set>) (0) | 2022.02.20 |
스프링 @Bean과 @Component (0) | 2022.02.20 |
댓글 영역