@Component 붙이기 애매하면 상속을 받아서 새 클래스를 만들고 거기에 @Component를 붙여도 됩니다.
더 편한 방법은 @Configuration 클래스의 메서드에 @Bean 을 붙인 메서드(변수타입을 리턴타입으로 하고, 변수명을 메서드명으로 하는)를 만들어 주세요.
같은 리턴타입을 가지는 @Bean 메서드를 많이 만들어 두고, 필요할 때 가져다가 쓰면 됩니다. 단 변수명과 일치하는 메서드명을 가진 @Bean 메서드가 생성한 객체가 사용되는 것을 기억하세요.
스프링 부트안에는 공유객체 저장소가 있다. 그곳에 들어가는 방법은 클래스에 @Component 를 붙이거나 @Bean 메서드를 구현
스프링 MVC 없이는 우리가 요청을 직접 HttpServletRequest 객체에서 얻어야 했다. 해당 객체는 요청이 들어오면 생기고 그 요청에 대한 응답을 완료하면 자동으로 사라진다. 실제 수명은 대략 0.5초 이하
스프링 MVC 없이는 우리가 응답을 직접 HttpServletResponse 객체에 넣어야 했다. 해당 객체는 요청이 들어오면 생기고 그 요청에 대한 응답을 완료하면 자동으로 사라진다. 실제 수명은 대략 0.5초 이하
HttpServletResponse 객체에 응답을 보낼 때 응답 데이터의 타입과 인코딩을 직접 설정해야만 한다. 세밀하게 할 수 있다는 장점이 있지만 평소에는 크게 필요없다. 이 객체는 현업에서 가끔씩만 쓰인다.
기본적으로 생성되는 빈은 싱글톤 스코프이다. 딱 1번만 객체 생성되고 그 이후에는 무조건 해당 객체가 공유되는 방식이다. 절대 없어지지 않는다. HttpServletRequest, HttpServletResponse 객체는 금방 사라진다.
빈(스프링부트에서 공유되는 객체)을 등록할 때@RequestScope 를 이용하면, 공유되는 객체의 수명 요청과 응답객체의 수명과 맞출 수 있다.
해당 응답이 끝날 때 까지는 같은 객체를 공유한다는 것을 증명, 타임리프에서 @ 문법을 사용해서 빈에 있는 rq 객체를 가져와서 출력, 타임리프의 실행자체는 @RequestScope 이지만 거기서 싱글톤 스코프인 articleService 빈에 접근 가능하다. 하지만 반대의 경우는 안됨
객체 리모컨 창고인 컨텍스트가 있다.
컴포넌트 붙은거는 뉴를 하지않아도 객체가 등록이된다.
필요할때마다 공유한다.
사전등록
컴포넌트 리포지터리 서비스
컴피규레이션 붙은 클래스에 @Bean등록
스프링에 공유객체를 넣어두는 곳이 있다.
쓰레드에서
서블릿 객체가 만들어짐
수명
스프링 객체는 앱이 꺼질때가지
리퀘스트 리스폰스는 요청있을때 생기고 없어진다
어플리케이션 스코프
앱 꺼질때까지
리퀘스트 스코프
rq객체가
서블릿 필터
스프링에는 인터셉터라는 개념이 있다.
시작과 끝이 있다.
리퀘스트 받기전에 필터가 작동되고 스프링인터셉터
컨트롤러 타임리프
rq 빈을 불럿다
컴포넌트 명 안붙이면 클래스 명 소문자로 접근 가능하다
타임리프 골뱅이쓰고 빈이름 쓰면 접근 가능
브라우저 요청 → 컨트롤러 → 서비스 → 리포지터리 → 리포지터리 응답 → 서비스 응답 → 컨트롤러 응답 → 브라우저가 응답 받음