09 빈 스코프
p119 - src/test/java/spring/basic/scope/ScopeTest
public class ScopeTest {
@Test
void getBeanTest() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ProtoType.class);
ProtoType bean1 = ac.getBean(ProtoType.class);
ProtoType bean2 = ac.getBean(ProtoType.class);
Assertions.assertThat(bean1).isNotSameAs(bean2);
// 컨테이너 종료
ac.close();
bean1.destroy();
bean2.destroy();
}
@Scope("prototype")
@Component
static class ProtoType {
@PostConstruct
void init(){
System.out.println("ProtoType.init");
}
@PreDestroy
void destroy() {
System.out.println("ProtoType.destroy");
}
}
}
p122(왼쪽이미지) - build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.3'
id 'io.spring.dependency-management' version '1.1.6'
}
group = 'spring'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
p122(오른쪽이미지) - src/main/java/spring/basic/controller/RequestBean
@Component
//@Scope(value = "request")
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestBean {
private String value;
public RequestBean() {
this.value = UUID.randomUUID().toString();
}
public String getValue() {
return value;
}
@PostConstruct
public void init() {
System.out.println("RequestBean 생성됨: " + value);
}
@PreDestroy
public void destroy() {
System.out.println("RequestBean 소멸됨: " + value);
}
}
p123(왼쪽이미지) - src/main/java/spring/basic/controller/RequestScopeController
@RestController
@RequestMapping("/api")
public class RequestScopeController {
private final ObjectProvider<RequestBean> requestBeanObjectProvider;
@Autowired
public RequestScopeController(ObjectProvider<RequestBean> requestBeanObjectProvider) {
this.requestBeanObjectProvider = requestBeanObjectProvider;
}
@GetMapping("/request-scope")
public String getRequestScope() {
RequestBean requestBean = requestBeanObjectProvider.getObject();
System.out.println("requestBean.getValue() = " + requestBean.getValue());
return "Request scope bean value: " + requestBean.getValue();
}
}
p123(오른쪽이미지) - src/main/java/spring/basic/BasicApplication2
@SpringBootApplication
public class BasicApplication2 {
public static void main(String[] args) {
SpringApplication.run(BasicApplication2.class, args);
}
}
p126 - src/main/java/spring/basic/controller/RequestScopeController
@RestController
@RequestMapping("/api")
public class RequestScopeController {
private final RequestBean requestBean;
@Autowired
public RequestScopeController(RequestBean requestBean) {
this.requestBean = requestBean;
}
@GetMapping("/request-scope")
public String getRequestScope() {
System.out.println("requestBean.getValue() = " + requestBean.getValue());
return "Request scope bean value: " + requestBean.getValue();
}
}
p126 - src/main/java/spring/basic/controller/RequestScopeController
@RestController
@RequestMapping("/api")
public class RequestScopeController {
private final ObjectProvider<RequestBean> requestBeanObjectProvider;
@Autowired
public RequestScopeController(ObjectProvider<RequestBean> requestBeanObjectProvider) {
this.requestBeanObjectProvider = requestBeanObjectProvider;
}
@GetMapping("/request-scope")
public String getRequestScope() {
RequestBean requestBean = requestBeanObjectProvider.getObject();
System.out.println("requestBean.getValue() = " + requestBean.getValue());
return "Request scope bean value: " + requestBean.getValue();
}
}
Last updated