728x90
- Bean을 정의할 때 session scope로 정의하면 브라우저가 서버에 최초의 요청을 보낼 때 Bean 객체가 주입된다. 그 이후로는 다시는 주입되지 않는다. 한번 주입된 객체를 계속해서 사용하는 것이라고 보면 된다.
- 주입된 Bean은 주입만 이루어지는 것이므로 sesion 영역에 저장되지는 않는다.
java 방식은 @SessionScope
xml은 scope="session"
config 패키지를 생성하고 RootAppContext 클래스를 만든다. 모든 빈 주입은 여기서 이루어지게 된다.
@Configuration
public class RootAppContext{
@Bean
@Session //빈이 주입되는 시기가 세션 요청이 발생했을 때
public MemberDTO member() {
return new MemberDTO();
}
@Bean("member2")
@Session //빈이 주입되는 시기가 세션 요청이 발생했을 때
public MemberDTO member2() {
return new MemberDTO();
}
}
@Controller
public class TestController{
@Autowired //정의된 Bean중에서 MemberDTO로 정의가 된 것이 있는지 확인.
MemberDTO member;
@Resouce(name = "member2")
MemberDTO member2;
@GetMapping("/test")
public String test(){
member.setName("홍길동");
member.setId("hong");
member2.setName("김길동");
member2.setId("kim");
return "forward:test1";
}
@GetMapping("/test1")
public String test1(Model model){
model.addAttribute("member",member);
model.addAttribute("member2",member2);
return "";
}
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 https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<bean class="com.tests.test.members.MemberDTO" scope='session'/> <!--패키지명-->
<bean class="com.tests.test.members.MemberDTO" scope='session' id="member2"/>
</beans>
xml로 하면 무조건 주입을 시킬라고 합니다.
그래서 나중에 주입시키려는 @Lazy 를 사용한다.
@Controller
public class TestController{
@Autowired //정의된 Bean중에서 MemberDTO로 정의가 된 것이 있는지 확인.
@Lazy
MemberDTO member;
@Resouce(name = "member2")
@Lazy
MemberDTO member2;
@GetMapping("/test")
public String test(){
member.setName("홍길동");
member.setId("hong");
member2.setName("김길동");
member2.setId("kim");
return "forward:test1";
}
@GetMapping("/test1")
public String test1(Model model){
model.addAttribute("member",member);
model.addAttribute("member2",member2);
return "";
}
이름을 통해 주입받은 member2만 따로 model 에 담아서 보내지 않아도 자동으로 session 영역에 저장이 된다.
@Component //@Component(value = "SessionMember") 이름으로 주입된다.
@SessionScope
public class MemberDTO{
private String name;
private String id;
//getter, setter 생략
}
ServletAppContext 클래스
//Spring MVC 프로젝트에 관련된 설정하는 클래스
@Configuration
//Controller 어노테이션이 셋팅되어 있는 클래스를 Controller로 등록한다.
@EnableWebMvc
//스캔할 패키지를 정한다.
@ComponentScan("com.tests.test.controller")
@ComponentScan("com.test.test.members") // 빈 캐피지를 스캔한다.
public class ServletAppContext implements WebMvcConfigurer{
//Controller의 메서드가 반환하는 .jsp의 이름앞뒤에 경로와 확장자를 붙여주도록 설정한다.
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
WebMvcConfigurer.super.configureViewResolvers(registry);
registry.jsp("WEB-INF/views/", ".jsp");
}
}
주입방법은 @Autowried 와 @Resource 로 하면 된다. 이 방법은 자동으로 session 영역에 추가되지 않으므로 model 로 추가해주어야한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- 스캔할 Bean들이 모여있는 패키지를 지정한다 -->
<context:component-scan base-package="com.tests.test.controller"/>
<context:component-scan base-package="com.tests.test.members"/>
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.tests.test" />
</beans:beans>
728x90
'Back-End > Spring(Boot)' 카테고리의 다른 글
스프링 ApplicationScope 빈주입 (0) | 2021.03.06 |
---|---|
스프링 Application Scope (0) | 2021.03.06 |
스프링 Session (0) | 2021.03.06 |
스프링 Request Scope 빈 주입 (0) | 2021.03.06 |
스프링 RequestScope (0) | 2021.03.06 |