스프링/1. 스프링 핵심 원리 47

51강. request scope Provider 이용

간단. Provider를 이용해서 request 순간에 빈으로부터 찾아오게끔 지연시키면 됨. @Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider myLoggerProvider; @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request){ String requstURL = request.getRequestURI(); MyLogger myLogger = myLoggerProvider.getObject(..

50강. request 스코프

request 하면 나머지 비슷비슷함. web환경을 동작시키기 위해선 web환경 관련 라이브러리 필요. implementation 'org.springframework.boot:spring-boot-starter-web' 하면 이제 알아서 자동으로 CoreApplication main 실행시켜 보면 tomcat하면서 실행 됨. 웹 라이브러리 추가 시, 기존의 AnnotationConfigApplicationContext에서 추가적으로 웹과 관련된 설정과 환경이 필요하므로 AnnotationConfigServletWebServerApplicationContext를 기반으로 애플리케이션 구동 request는 일단 [UUID][requestURL] {message} 이 포멧으로 출력되도록 만들 계획 UUID로..

49강. 웹 스코프

request만 알면 거의 다 안다고 하는데.. 문제는 내가 모른다. 뭐 다음 HTTP 강의 코스에서 설명해 주시겠지.. 일단 모르면 모르는 데로 설명 하자면, 웹 스코프는 웹환경에서만 동작하고, 종료시점까지 스프링 컨테이너가 관리하기 때문에 종료메서드 까지 실행된다. 종류는 request session application websocket 이렇게 있다. request : http 요청이 들어 올때마다 이 요청을 각각 따로 처리 해 준다. 즉, http 요청이 2번 들어오면 request 스코프가 2개 생성 됨. http 요청이 들어왔을 때 시작으로 ~ 나갈 때 까지 유지되는 스코프. session : HTTP Session과 동일한 생명주기. application : ServletContext와 동일..

48강. Provider

앞서 말한 프로토타입과 싱글톤과 같이 쓸 시 프로토타입의 사용목적과 맞지 않는 곳은 Provider로 해결 @Scope("singleton") static class ClientBean{ private final ObjectProvider prototypeBeanProvider; @Autowired public ClientBean(ObjectProvider prototypeBeanProvider){ this.prototypeBeanProvider = prototypeBeanProvider; } public int logic(){ PrototypeBean prototypeBean = prototypeBeanProvider.getObject(); prototypeBean.addCount(); return p..

47강. 프로토타입빈을 싱글톤 빈과 사용할 때 문제

기본적으로 프로토타입 빈을 쓴다는 것은 사용할 때 마다 새롭게 생성해서 사용하려는 의도임. public class SingletonWIthPrototypeTest1 { @Test void prototypeFind(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); PrototypeBean prototypeBean1 = new PrototypeBean(); prototypeBean1.addCount(); assertThat(prototypeBean1.getCount()).isEqualTo(1); PrototypeBean prototypeBean2 = new Prototype..

46강. 프로토타입 빈.

프로토타입 빈은 조회할 때 (getBean())마다 새로 생성해서 줌. 그냥 생성 -> 의존관계주입 -> 초기화콜백함수 까지만 해주고 관리를 안해줌. 아예 컨테이너에서 메모리 참조를 안한다? 라고 보면 될려나? 그래서 소멸전 콜백 함수 같은 건 클라이언트가 직접 호출해야 함. public class SingletonTest { @Test @DisplayName("싱글톤 빈 테스트") void singletonBeanFind(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); SingletonBean singletonBean1 = ac.getBean(SingletonBean..

45강. 빈 스코프

스코프는 말 그대로 범위. 그런데 여기서는 생명주기의 범위를 뜻함. 즉, 언제까지 살아있는지 싱글톤 기본 스코프, 컨테이너 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 ( + 초기화 콜백) 관여하고 더는 관여하지 않음. 그래서 소멸 콜백은 실행되지 않음... 말 그대로 프로토타입. 그냥 만들어 놓고 끝. 웹관련 스코프 request: 웹 요청이 들어온 후, 나갈 때 까지 유지되는 스코프 session : 웹 세션 생성 후 종료될 때 까지 유지 application : 웹 서블릿 컨텍스트와 같은 범위로 유지

44강. @PostConstruct, @PreDestroy 로 콜백

public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); } public void setUrl(String url){ this.url = url; } //서비스 시작 시 호출. public void connect(){ System.out.println("connetc: " + url); //임시로 출력만. } public void call(String message){ System.out.println("call : " + url + "message = " + message); } //서비스 종료 시 안전하게 연결끊기 public void disconn..

43강. 빈 등록시 설정 정보에 초기화, 소멸 메서드 지정

public class BeanLifeCycleTest { @Test public void lifeCycleTest(){ ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class); //ApplicationContext는 close를 제공 안한다. Configurable이라는 하위까지 내려가야 함. NetworkClient client = ac.getBean(NetworkClient.class); ac.close(); } @Configuration static class LifeCycleConfig{ @Bean(initMethod = "init", destroyMethod = "close"..