LazyController
(DispatcherController은 빈으로 등록했는데그거 myservlet에다가 등록했네 와 이걸 지금 앎...)
정리정리
원래 등록 되어있는 빈은
최초 시작 할 때 자동으로 생성 됨 . 사용하지도 않는데 우선 생성이 돼! ( ===> lazy-init="false" 이게 기본임)
아니 사용하지도 않는 데 생성되고 그려... 메모리 부화되게.....
그래서 그 걸 지연시키기 위해 쓰는게 ( ===> lazy-init="true" 로 만드는거.... )
@Lazy임! 그니까... 내가 요청할 때 그때 생성되게 하는 하는 용도지
여기까지가 기본 !!
그런데 !! 예외가 있음
만약 lazy 시킬 페이지가 다른 페이지에서 false(디폴트)를 참조되고 있다면
(쉽게말해서 다른페이지랑 연결되어 있는데 거기서는 최초 실행 시 빈을 생성하게 하는 페이지인거지 !!)
lazy가 먹질 않음!! 이건 어찌보면 당연한거...
이건 콘솔창을 봐야 함!
lazy 설정 전
서버 처음 시작하면 자동으로 생성이 됨
근데 Lazy 넣어주면
/*
프로젝트 최초 실.행. 시. 스프링이 관리하는 빈(스프링 컨테이너에 등록된 빈)은 하나가 생성된다(싱글톤) ---요게 기본
해당 빈을 사용할 때가 아닌 프로젝트 실행 시 생성되서 아 어쩐지 빈에서 문제있으면 시작하자마자 에러뜨더라.....
그치만 사용하지도 않는데 생성해서 메모리를 잡아버리네
그래서 요청할 때 생성하게 만드는 게 Lazy-init 속성을 추가 하는 것!
default : 최초실행 시 생성
true : 요청 시 생성
※단,lazy-init="true" 로 설정해도 해당 빈이 lazy-init="false" 인 빈에서 참조 된다면
의존성 관계(DI)로 인해 프로젝트 최초 실행시에 생성되게 된다.
2. 어노테이션으로 빈을 생성하는 경우
@Lazy 어노테이션 사용.디폴트는 value=true 이다
*/
@Controller
@Lazy
public class LazyController {
public LazyController() {
System.out.println("LazyController 생성자");
}
@RequestMapping("/Lazyloading/Lazy.do")
public String exec(Model model) {
//데이터 저장
model.addAttribute("message","요청 시 LazyController가 생성됩니다.");
//뷰정보 반환
return "annotation06/Annotation";
}
}
페이지 요청 시( 저기 저 lazy 버튼 누를 때 ) 그제야 생성됨 ! 확인 끝!
여기서 한 번 더 어노테이션들 정리
<context:component-scan base-package= "최상위 패키지명" />
최상위 패키지부터 하위 패키안에 있는 모든 컴포넌트(자바 클래스)를 자동으로 생성해준다
즉 설정파일(xml)에 빈을 등록할 필요 없다. (겁나 왔다갔다 할 필요가 없음 !!)
단, class앞에 @Controller,@Component,@Service,@Repository등이 붙은 클래스만 생성해 준다.
각 클래스의 성격에 따라 적절한 어노테이션을 붙이자
==> 후려쳐서
<bean:> 요 딴거 안만들어도 되고 해당 페이지에 적절한 @어노테션만 쓰면
<context:component-scan base-package= "최상위 패키지명" /> 얘가 @어노 붙은 애들을 몽땅 다 처리해 준다는 것 !
@Controller : 사용자 요청을 처리하는 클래스
@Service : 서비스 역할을 하는 클래스(비지니스 로직을 갖고있는 클래스)
@Repository: 저장소와 관련된 로직을 갖고 있는 클래스(DAO계열 클래스)
@Configuration: 빈 설정파일이 아닌 자바코드로 빈을 컨테이너에 등록할때
@Component:기타 클래스
-스프링 2.5 버전에서 등장.이전 버전의 스프링에서는 모든 빈들은 XML 파일에 설정해야함.
-최상위 패키지 안의 클래스들을 스캔하고 위 어노테이션이 붙은 클래스들의 인스턴스를 생성
-@Autowired 와 @Resource 같은 어노테이션을 사용할 수 있다 . 즉 컨테이너에 빈이 등록되야
주입이 가능하다
<아래 주석 혹은 use-default-filters="false"시 사용자 요청처리와 관련된 모든 클래스를 빈으로 등록해야 생성된다
모든 어노테이션(@Controller,@Service, @Repository, @Component)의 자동 생성을 막는다
단,@Controller어노테이션은 제외
<context:component-scan base-package="com.kosmo.springapp" use-default-filters="false">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
'학원 > SPRING' 카테고리의 다른 글
12/09 61-4 [SPRING] @ResponseBody/@RequestBody/@RequestHeader (0) | 2022.12.10 |
---|---|
12/09 61-3 [SPRING] @SessionAttribute (1) | 2022.12.10 |
12/09 61-1 [SPRING] @Autowired/@Resource (1) | 2022.12.09 |
12/08 60-2 [SPRING] @어노테이션 (0) | 2022.12.08 |
12/08 60-1 [SPRING] ReturnType/DI 개념 (1) | 2022.12.08 |